anacron을 사용하여 실행을 예약하는 방법은 무엇입니까?

anacron을 사용하여 실행을 예약하는 방법은 무엇입니까?

나는 종종 다음과 같은 형식으로 스크립트에서 나중에 보조 작업을 예약합니다.

at now + 8 hours <<< "rm -f workfile.$$ >> $worklog 2>&1 "

또는

at 11pm + $(date +%M) minutes <<< "./postMarketJob.sh $orderID &> $orderID.log"

문제는 제가 서버로 사용하는 노트북이나 PC가 예정된 시간이 되면 종료되는 경우가 있어서,일하고 있는결코 일어나지 않을 것입니다.

동일한 질문이 다음에도 적용됩니다.예약 된 일들기입.

나는 이해하려고 노력한다anacron 매뉴얼 페이지우분투의 경우.

요청 시 또는 서버가 다시 온라인 상태가 되는 즉시 작업이 실행되도록 예약할 수 있는 도구가 있습니까?

와 함께 있을 필요는 없습니다 anacron. 단지 무언가라면뿌리사용할 수 있는 경우 다음으로 통화를 마무리합니다.sudo

밝히다

이러한 작업은 고정된 스크립트(있는 경우)가 아니지만 매우 가변적이고 조건적입니다. 즉, 프로그램의 예상치 못한 상황에 따라 처음부터 예약될 수도 있고 예약되어서는 안 됩니다.

내 프로그램에 유사한 인터페이스를 제공하기 위해 atd/anacron 위에 자체 래퍼를 개발해야 할 수도 있지만 at뭔가 이미 존재하기를 바라고 있습니다. fcron호환되는지, 일부 리포지토리에서 Ubuntu에 사용할 수 있는지 확인했습니다 .

답변1

한 번 실행되는 작업의 경우 at요구 사항이 완전히 충족됩니다. atd예정된 날짜 이후에도 언제든지 예정된 모든 작업을 실행합니다. 특히 시작 시 가동 중지 atd시간 동안 날짜가 만료되는 모든 작업의 ​​실행을 트리거합니다.

정기적인 작업의 경우 고정 일정 crontab 항목과 @rebootcrontab 항목을 결합할 수 있습니다. 항목 에서는 @reboot지난 24시간(또는 원하는 시간 간격) 동안 완료되지 않은 작업만 수행하세요.

42 5 * * * /usr/local/bin/myjob && touch /var/myjob/done
@reboot if [ -z "$(find /var/myjob.done -mtime 1)" ]; then /usr/local/bin/myjob && touch /var/myjob/done; fi

답변2

Anacron은 훌륭합니다...매번 작업이 실행되도록 보장하는 시스템입니다.질소수량하늘, 재부팅 후 - 제어가 많지 않습니다. 또한 이는 상주 데몬이 아니므로 crond 또는 atd를 대체할 수 없습니다. 부팅 시(또는 수동으로 호출할 때) 시작하고 일부 조건을 확인하기 전에 적절한 간격을 기다린 다음 모든 것이 확인되거나 실행되면 종료됩니다.

즉, atd에 대한 백업으로서 귀하의 경우에 도움이 될 수 있습니다. 다음을 수행할 수 있습니다.
echo '@monthly 0 custom1timejob script_or_cmd_here' >> /etc/anacrontab

그런 다음 at 작업을 예약하고, 작업이 실행되었음을 anacron이 알 수 있도록 스크립트에 무언가를 포함시키십시오(실행을 통해 date +%Y%m%d > /var/spool/anacron/custom1timejob).훨씬 더 간단하다: anacrontab() 에서 항목을 제거하면 됩니다 sed -i /custom1timejob/d /etc/anacrontab.

그런 다음 최악의 시나리오에서는 다음에 시스템이 시작될 때 작업이 실행되어야 합니다.
RANDOM_DELAY(/etc/anacrontab [참조]의 및 변수가 기대에 어긋나지 않는지 확인하십시오 .)START_HOURS_RANGEman anacrontab

답변3

이 경우 batch옵션이 at도움이 될 수 있습니다.

내 샌드박스 RHEL5 시스템에서는 다음 2분 동안 배치 작업을 예약한 다음 atd를 중지할 수 있습니다. 5분 정도 기다렸다가 다시 시작했어요. atd가 시작되면 일괄 작업이 즉시 시작됩니다.

통화: batch "NOW+2 minutes"또는 허용되는 at시간을 입력하세요.

Fedora 16에서 이 작업을 시도하는 데 문제가 있었습니다. 매뉴얼 페이지에는 시간 입력을 지원한다고 나와 있지만 이 명령은 인수를 허용하지 않는다고 보고합니다.

관련 정보