지정된 시간에 atd 작업 중지

지정된 시간에 atd 작업 중지

저녁에 다운로드 예약을 하려고 합니다. atd오전 2시에 다운로드 스크립트를 시작하는 작업을 만들었습니다 . 이제 동일한 작업을 오전 7시에 중지하고 싶습니다(아직 실행 중인 경우). 그것이 내가 지금 하고 있는 일이다 shutdown -h 7:00. atd지정된 시간에 작업을 중지 할 수 있나요 ?

답변1

at내부적으로 중지 시간을 지정할 수 있는 메커니즘이 없습니다 . 오전 7시에 다른 작업을 예약하고 at해당 작업이 아직 실행 중인지 확인하고 종료합니다.

답변2

At작업은 쉘 인터프리터(일반적으로 Linux에서 /bin/sh)를 사용하여 실행됩니다. 이는 작업으로 실행하려는 모든 명령을 at명령을 실행하려는 셸의 PID 번호로 추적할 수 있음을 의미합니다. 특별한 쉘 변수를 사용하여 이 PID를 간단히 캡처할 수 있습니다 $$. 파일에 저장할 수 있습니다(현재 세션 셸에서 확장되지 않도록 작은따옴표를 사용해야 함).

at 'echo $$ > /var/run/my_at_job.pid; your_command; rm /var/run/my_at_jon.pid' | at TIME_SPEC

그런 다음 다른 at작업에서 해당 작업과 해당 작업에서 생성된 모든 하위 프로세스( you_command)를 종료할 수 있습니다.

if [ -r /var/run/at_job.pid ]; then
  for PID in $(ps --ppid `cat /var/run/at_job.pid` -o pid | sed -e '1d'); do
    kill $PID
  done
fi

답변3

작업에 시간 제한을 포함할 수 있습니다.

timeout "$(($(date +%s -d '7am') - $(date +%s)))" wget -c http://example.com/wibble

또는 작업을 종료할 수 있도록 작업의 프로세스 ID를 어딘가에 기록하도록 합니다. 오전 2시에 직장에서:

echo $$ >~/.at.download.pid
wget -c http://example.com/wibble
rm ~/.at.download.pid

오전 7시 직장에서:

if [ -e ~/.at.download.pid ]; then
  kill $(~/.at.download.pid)
  rm ~/.at.download.pid
fi

관련 정보