nohupコマンドでIOエラーを生成するプログラム名をLOGにリダイレクトする方法は?

nohupコマンドでIOエラーを生成するプログラム名をLOGにリダイレクトする方法は?

バックグラウンドで別のプログラムを実行するプログラムがあります。メインプログラムはprogramAであり、メインプログラムによって実行されるプログラムはprogram1a、program1b、program1cです。

シェルの接続が失われたかどうかにかかわらず、実行を続けるにはプログラムが必要なので、このnohupコマンドを使用します。

ただし、各プログラムには以下のように独自のログファイルがあります。

プログラム A -->logfileA.txt
プログラム 1a -->logfile1a.txt
プログラム 1b -->logfile1b.txt
プログラム 1c -->logfile1c.txt

サブプログラムのいずれかでエラーが発生すると、エラーメッセージがメインプログラムに対応するLOGファイルに表示されます。

例:

  1. プログラムAは他のルーチンから呼び出される。 -

    nohup nice -10 programA 2>&1 > logfileA.txt
    
  2. 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.txtlogfile1b.txtlogfile1c.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がリダイレクトされる前に発生します。

また見なさい:STDERRがこのように/dev/nullにリダイレクトされるのはなぜですか?

おすすめ記事