バックグラウンドでの処理中に複数のファイルにログを記録する

バックグラウンドでの処理中に複数のファイルにログを記録する

2つのログファイルに並列に書き込むbashスクリプトがあります。

echo "$(date) | [STATE] Activating IP forwarding" >> $logsPath$logFileName
echo $(date +"%Y-%m-%d %H:%M")","$previousState >> $logsPath$usageStatsFileName
echo $(date +"%Y-%m-%d %H:%M")","$currentState >> $logsPath$usageStatsFileName

スクリプトをフォアグラウンドで実行すると正常に動作しますが、バックグラウンドで送信するとこのファイルには何も記録されません。

nohup nice ./rfid_reader.sh&

バックグラウンドでスクリプトを実行し、上記の2つのファイルのログを保持し続けるにはどうすればよいですか?

ベストアンサー1

重要なヒント:

これはほとんど確かに質問とは関係ありません。他の人に役立つ可能性があるので、ここに残しておきます。しかし、少なくとも私が使用しているnohupDebianバージョンでは、内部リダイレクトは影響を受けず、スクリプトnohupのstderrとstdoutのみをキャプチャします。


デフォルトでは、nohupすべての出力はに印刷されますnohup.out。通常これを通知しますが、バックグラウンドで実行されているため表示されません。たとえば、次のことを試してみてください。

$ nohup echo "foo"
nohup: ignoring input and appending output to ‘nohup.out’

これを防ぐには、プログラム出力を明示的にリダイレクトする必要があります。

$ nohup echo "foo" > bar
nohup: ignoring input and redirecting stderr to stdout

したがって、スクリプトを実行してその出力をリダイレクトする必要があります。標準エラーと標準出力ストリームの両方が同じファイルにリダイレクトされます。

nohup nice ./rfid_reader.sh > output_file &

これは実際にはnohupの合理的なデフォルトです。全体的な目的は、ターミナルセッションを閉じてバックグラウンドで実行されるようにすることであるため、ターミナルに印刷するとその目的が失われるためです。

おすすめ記事