nohupを使用して複数のスクリプトを同時に実行する

nohupを使用して複数のスクリプトを同時に実行する

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シグナルを無視する」が継承されます)。

おすすめ記事