web-dev-qa-db-ja.com

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

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をキャプチャできますか?

前もって感謝します。

30
McKAMEY
  1. いいえ-それらは[〜#〜] stdout [〜#〜]echoを使用する場合)または[〜#〜] stderr [〜#〜]に移動しますecho >&2を使用する場合)。

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

ログを探す場合は、teeコマンドを探します。 syslogを使用する場合は、loggerを参照してください。好きなように組み合わせることができます。

17
Nils

スクリプトを呼び出し、出力をファイルにリダイレクトするラッパースクリプトを記述します。

#!/bin/bash

    /path/to/your/script &>/path/to/logfile
9
user9517

次のように、メッセージを画面と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
6
ott--

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/

5
qugu