前のコマンドが完了するまでbashスクリプトを一時停止します。

前のコマンドが完了するまでbashスクリプトを一時停止します。

次のbashスクリプトがあります。

##script
#!/bin/bash
rm data*
rm logfile*
for i in {1..30}
do
## append a & if you want to run it parallel;
nohup Rscript --vanilla main.R 10 100 $i &> logfile"$i" &
done

別の30個のループを続行するために、最初のforループの後に別のforループを作成したいと思います。例えば

##script
#!/bin/bash
rm data*
rm logfile*
for i in {1..30}
do
## append a & if you want to run it parallel;
nohup Rscript --vanilla main.R 10 100 $i &> logfile"$i" &

for i in {31..60}
do
## append a & if you want to run it parallel;
nohup Rscript --vanilla main.R 10 100 $i &> logfile"$i" &
done

新しいタスクを開始する前に、最初のタスクを終了したいと思います。しかし、nohup彼らはすべて同時に実行されているようです。

nohup私は私のサーバーにTelnetを接続し、そこで作業を開始してから私のbashを閉じるので、それを持っています。代替ソリューションはありますか?

ベストアンサー1

waitこれを行うには、このコマンドを使用する必要があります。すべての子プロセスIDをキャプチャして具体的に待つことができます。あるいは、スクリプトが生成する唯一のバックグラウンドプロセスである場合は、引数なしでwait直接呼び出すこともできます。たとえば、

#!/bin/bash
# run two processes in the background and wait for them to finish

nohup sleep 3 &
nohup sleep 10 &

echo "This will wait until both are done"
date
wait
date
echo "Done"

おすすめ記事