저녁에 다운로드 예약을 하려고 합니다. 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