Только командная строка ОС UNIX / Linux [закрыто]

Есть несколько способов проверить, запущены ли у вас задания. Допустим, вы выполнили команду

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
4
07.01.2020, 06:25
0 ответов

Теги

Похожие вопросы