Linuxでは、起動時に実行されるスクリプトをいくつか記述し、それらをインストールするさまざまな方法を試しました。より大きなスクリプトの場合は、/etc/init.d
を入力して、適切な/etc/rc.d/rc?.d
ランレベルをリンクします。小さいスクリプトの場合は、/etc/rc.d/rc.local
に追加します。このプロセスはスムーズに実行されているようです。
スクリプトの1つを調整したところ、失敗しました。エラー出力をキャプチャできないようで、診断に時間がかかります。 /var/log/messages
を確認し、/var/log
の残りの部分を調べましたが、使用できるものが見つかりません。
誰か知っていますか:
前もって感謝します。
いいえ-それらは[〜#〜] stdout [〜#〜](echo
を使用する場合)または[〜#〜] stderr [〜#〜]に移動します(echo >&2
を使用する場合)。
スクリプトは独自にログやsyslogに書き込む必要があります(ディストリビューションには、そこに役立つ可能性があるいくつかのinit.d関数が含まれている可能性があります-ディストリビューションを追加してください)あなたの質問に)。
ログを探す場合は、tee
コマンドを探します。 syslogを使用する場合は、logger
を参照してください。好きなように組み合わせることができます。
スクリプトを呼び出し、出力をファイルにリダイレクトするラッパースクリプトを記述します。
#!/bin/bash
/path/to/your/script &>/path/to/logfile
次のように、メッセージを画面と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
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/ 。