작업 완료 후 이메일을 보내는 bash 기능

작업 완료 후 이메일을 보내는 bash 기능

bashrc에 다음 함수를 작성했습니다. 5초마다 작업이 실행 중인지 확인하고 작업이 완료되면 이메일을 보냅니다.

function jobcheck () {
  time=`date`
  jobstatus=`jobs $1`
  while [ 1 ]; do
  if (( ! `echo $jobstatus | grep "Running" | wc -l` )); then
    "sendEmail command to send email"
    break;
  fi
  sleep 5;
  done
}

이 함수를 다음과 같이 호출하고 싶습니다(예를 들어 작업 번호 2의 경우).

jobcheck 2

명령줄에서 다른 명령을 계속 실행합니다. 하지만 while 루프가 계속 실행되고 명령 프롬프트가 표시되지 않습니다.

내가 실행하면

jobcheck 2 &

그런 다음 오류가 발생합니다.bash: jobs 2 not found

이 기능을 백그라운드에서 어떻게 실행할 수 있나요?

답변1

이렇게 하려면 함수를 다시 작성해야 합니다.

를 사용하여 백그라운드 작업을 시작하면 &셸이 작업을 추적하고 jobs내장 기능을 사용하여 실제로 더 많은 정보를 찾을 수 있습니다. 그러나 이 정보는 특정그 인스턴스shell; 함수를 직접 실행하면 &백그라운드 작업이 포함된 셸이 아닌 별도의 셸이 생성되므로 해당 별도의 셸에서 원래 셸 작업에 대한 정보에 액세스할 수 없습니다.

그러나 이 문제를 해결하는 간단한 방법이 있습니다.

  • 작업 번호 대신 프로세스 ID(PID)를 기반으로 실행되도록 함수를 다시 작성하세요. 즉, 프로세스가 여전히 존재하는지 확인하도록 합니다(예: ps출력을 구문 분석하거나 프로세스가 /proc/pid존재하는지 확인).
  • %2대신 인수로 2새 함수를 실행하십시오 . 즉, 모니터링하려는 작업 ID 뒤에 백분율 기호를 지정합니다. Bourne 쉘은 백분율 기호를 사용하여 작업 ID를 해당 작업의 pid로 바꿉니다.

이것으로 작동합니다.

관련 정보