지정된 시간에 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

관련 정보