他のコマンドを実行する別の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.log
nohup python3 ..
scriptb.sh
a.log
python3 ...
a.log
マンページには次のように記載されていますnohup(1)
。
標準入力が端末の場合は、読み取れないファイルにリダイレクトします。
標準出力が端末の場合は、可能であれば
nohup.out
出力を端末に追加し、$HOME/nohup.out
それ以外の場合は出力を追加します。標準エラーが端末の場合、標準出力にリダイレクトします。