
バックグラウンドで別のプログラムを実行するプログラムがあります。メインプログラムはprogramAであり、メインプログラムによって実行されるプログラムはprogram1a、program1b、program1cです。
シェルの接続が失われたかどうかにかかわらず、実行を続けるにはプログラムが必要なので、このnohup
コマンドを使用します。
ただし、各プログラムには以下のように独自のログファイルがあります。
プログラム A -->logfileA.txt
プログラム 1a -->logfile1a.txt
プログラム 1b -->logfile1b.txt
プログラム 1c -->logfile1c.txt
サブプログラムのいずれかでエラーが発生すると、エラーメッセージがメインプログラムに対応するLOGファイルに表示されます。
例:
プログラムAは他のルーチンから呼び出される。 -
nohup nice -10 programA 2>&1 > logfileA.txt
ProgramAの内部では3つの異なるプログラムを呼び出します。 -
nohup nice -10 program1a 2>&1 > logfile1a.txt nohup nice -10 program1b 2>&1 > logfile1b.txt nohup nice -10 program1c 2>&1 > logfile1c.txt
エラーが発生すると、またはlogfileA.txt
代わりにエラーが表示されます。logfile1a.txt
logfile1b.txt
logfile1c.txt
基本プログラムのログファイルに表示されるエラーを生成したプログラムをどのように知ることができますか?
答え1
リダイレクトの順序を変更する必要があります。
nohup nice -10 program1a > logfile1a.txt 2>&1
nohup nice -10 program1b > logfile1b.txt 2>&1
nohup nice -10 program1c > logfile1c.txt 2>&1
「fd 1からfd 2をコピー」を意味します2>&1
。これは、提供された例では、"">"を介してfd 1がリダイレクトされる前に発生します。