Есть несколько способов проверить, запущены ли у вас задания. Допустим, вы выполнили команду
nohup sas filename1.sas &
, и вы должны увидеть что-то вроде этого в ответ:
[1] 7539
[mel@server] $ nohup: ignoring input and appending output to `nohup.out'
вы можете проверить существование процесса с номером 7539
, используя бесконечный цикл следующим образом:
PID=${!} # this must be run immediately after submitting your job
flag=0
while [ $flag -eq 0 ]
do
sleep 30
ps -ef | grep ${PID} | grep -v grep >/dev/null
flag=${?}
done
echo "process ${PID} completed or died"
или вы можете сделать что-то более грубое:
flag=1
while [ ${flag} -ne 0 ]
do
sleep 30
flag=$(jobs|wc -l)
done
echo "all background jobs have finished or died"
любой из этих методов будет проверять существование ваших фоновых заданий каждые 30 секунд и завершается, когда в фоновом режиме нет заданий. Я предпочитаю первый метод.
ИЗМЕНИТЬ (в комментариях ниже) :
Чтобы запустить все 5 заданий, выполняющихся одно за другим, независимо от успеха или неудачи предыдущего задания, вы можете сделать это (обратите внимание, что код ниже предполагает имена файлов ваших заданий sas имеют формат filename1.sas
, filename2.sas
, ..., filename5.sas
):
>nohup.out
for i in 1 2 3 4 5
do
nohup sas filename${i}.sas &
PID=${!}
flag=0
while [ $flag -eq 0 ]
do
sleep 30
ps -ef | grep ${PID} | grep -v grep >/dev/null
flag=${?}
done # end of while loop
echo "process ${PID} completed or died"
mv nohup.out filename${i}.log # preserve a separate log file for each job
# if you know the successful and failed exit codes of sas process,
# you can compare the result to those values here. Since you did not
# provide any exit codes, this is left as is.
done # end of for loop