次の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"