Linux init.d / rc.dスクリプトからエラーメッセージを見つける方法


28

Linuxでは、ブート中に実行されるスクリプトをいくつか作成し、それらをインストールするさまざまな方法を試しました。大きなスクリプト/etc/init.dの場合は、適切な/etc/rc.d/rc?.dランレベルを入力してリンクします。小さいスクリプトについては、に追加し/etc/rc.d/rc.localます。このプロセスはスムーズに実行されているようです。

今、スクリプトの1つを調整しましたが、失敗しています。エラー出力をキャプチャできないように見えるため、それを診断するのにかなり時間がかかります。私はチェック/var/log/messagesして残りの部分を調べまし/var/logたが、使用できるものが見つかりません。

誰か知っていますか:

  1. これらのエラーメッセージはどこかに自動的にキャプチャされますか?
  2. そうでない場合、init.dスクリプトからstdout / stderrをキャプチャするにはどうすればよいですか?

前もって感謝します。



systemdを使用して最新のディストリビューションにアクセスすると、それが自動的に処理され、各サービスのログメッセージをジャーナルできます。
eckes

回答:


17
  1. いいえ-STDOUT(使用する場合echo)またはSTDERR(使用する場合)に移動しますecho >&2

  2. スクリプトは独自にログやsyslogに書き込む必要があります(ディストリビューションには、そこに役立つ可能性のあるinit.d関数が含まれている場合があります-質問にディストリビューションを追加してください)。

ログを探す場合は、teeコマンドを探してください。syslogにアクセスする場合は、をご覧くださいlogger。好きなように組み合わせることができます。



6

次のように、画面とsyslogの両方にメッセージをエコーする機能を作成できます。

LOGGER="/usr/bin/logger -t $myScript"    # check the location of logger for your system

myEcho () {
    echo "$1"
    $LOGGER "$1"
}

それを別のファイルに入れて、スクリプトに含めることもできます

#!/bin/bash
myScript=$(basename $0)
[ -r /myFunctions/myecho ] && . /myFunctions/myecho

おかげで、これは私が探していたものに近くなりました。I / Oをリダイレクトする方法は知っていますが、ロガーを呼び出す方法は知りませんでした。
McKAMEY

[ -r ... ]存在するかどうかを確認するテストはありますか?
McKAMEY

はい、ファイルが読み取り可能かどうかを確認します。
ott--

5

通常、initスクリプトからのメッセージはどこにもキャプチャされません。したがって、あなたはそれを自分で行う方法を実装する必要があります。loggerすべての出力をsyslogに送信するために使用することをお勧めします。この例では、stdoutとstderrをsyslogに送信します。

exec 1> >(logger -s -t $(basename $0)) 2>&1

この素晴らしい記事で見つけました:http : //urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.