ネストされたnohupエラー処理出力

ネストされたnohupエラー処理出力

他のコマンドを実行する別のbashスクリプトB(scriptb.shなど)を実行するbashスクリプトA(scripta.shなど)があります。

ㅏ:

# Cool logic
scriptb.sh &

第二:

# Cool logic
nohup python3 app.py >> app.log &

を実行すると、nohup scripta.sh >> a.log &Aとapp.pyの両方の出力をa.logに入れ、app.logは空です。

なぜこれが起こるのですか?この動作をどのように変更できますか?

ベストアンサー1

あなたのnohupは「stderrをstdoutにリダイレクトする」と言っていませんか?

これがまさに起こったことです。 stderrを(対話型シェルでコマンドを実行するときにstderrはttyであるため)にnohup scripta.sh >> a.log &リダイレクトした場合、2番目のfromはそれを行う必要はありません(stderrはttyではありませんが)。 stderrはに移動します。a.lognohup python3 ..scriptb.sha.logpython3 ...a.log

マンページには次のように記載されていますnohup(1)

標準入力が端末の場合は、読み取れないファイルにリダイレクトします。

標準出力が端末の場合は、可能であればnohup.out出力を端末に追加し、 $HOME/nohup.out それ以外の場合は出力を追加します。

標準エラーが端末の場合、標準出力にリダイレクトします。

おすすめ記事