nohupを使って4つのスクリプトを同時に実行したいです。これらのスクリプトはすべて同じフォルダにあります。
こんなのがうまくいくでしょうか? :
nohup /.scrip1.sh & /.scrip2.sh & /.scrip3.sh & /.scrip4.sh
nohup.outは印刷されますか?
ベストアンサー1
各スクリプトの前に以下を付けますnohup
。
for script in ./script{1..4}.sh; do
nohup "$script" &
done
nohup
マニュアルによると、出力は次のようになります。追加つまりnohup.out
、すべての出力が同じファイルに書き込まれるという意味です。ただし、すべてのスクリプトが同時に実行され、ファイルに書き込まれると、出力が混在する可能性があることに注意してください。
混合出力を防ぐために、単一のファイルに書き込むことをお勧めします。
for script in ./script{1..4}.sh; do
nohup "$script" >"$script.out" 2>&1 &
done
cat ./script{1..4}.sh.out
すべてのスクリプトの実行が完了したら、すべての出力ファイルを単一のストリームにリンクできます。コマンドが返されると、すべてのバックグラウンドジョブの実行が完了したことになりますwait
(タスクがまだシェルセッションに関連付けられていると仮定します).
これの変形:
nohup sh -c 'for script do "$script" >"$script.out" 2>&1 & done' sh ./script{1..4}.sh
ここで唯一の違いは、実行するパラメータのいくつかが与えられると、ループを実行するnohup
インラインスクリプトに適用されることです。sh -c
出力はまだ.out
以前のようにファイルに書き込まれます。
sh -c
これは、スクリプトがHUPシグナルを無視し、nohup
各スクリプトを実行するシェルもシグナルを無視するために機能します(「HUPシグナルを無視する」が継承されます)。