Unix SAS에서 일괄 SAS 작업을 실행하는 방법은 무엇입니까?

Unix SAS에서 일괄 SAS 작업을 실행하는 방법은 무엇입니까?

순차적으로 하나씩 실행해야 하는 5개의 SAS 작업이 있습니다.

nohup sas filename1.sas &나는 보통 명령줄에 이것을 입력하여 실행하고 몇 시간마다 수동으로 진행 상황을 확인합니다. 첫 번째 작업이 오류 없이 완료되면 두 번째 작업에 들어갑니다 nohup sas filename2.sas &.

진행 상황을 수동으로 확인하는 대신 순차적으로 실행할 수 있는 sas 코드나 unix 명령이 있습니까?

기본 sas 파일에 %include 문을 사용하는 것을 고려했지만, 루핑 매크로가 많고 %include를 발생시키는 매크로를 수행한다고 생각합니다.

추신. 또한 일반적으로 위 명령을 사용하여 자동으로 로그와 lst 파일을 인쇄해야 합니다.

답변1

작업이 실행 중인지 확인하는 방법에는 여러 가지가 있습니다. 명령을 실행했다고 가정하면

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초마다 백그라운드 작업이 있는지 확인하고 백그라운드에서 실행 중인 작업이 없으면 완료됩니다. 첫 번째 방법이 제가 선호하는 방법입니다.

편집하다(아래 댓글을 토대로):

filename1.sas이전 작업의 성공 여부에 관계없이 5개 작업을 모두 순서대로 실행하려면 다음을 수행할 수 있습니다(아래 코드에서는 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

관련 정보