리눅스에서는 매일 전날보다 3분 늦게 스크립트를 실행할 수 있나요?

리눅스에서는 매일 전날보다 3분 늦게 스크립트를 실행할 수 있나요?

내 첫 번째 해결책은 해당 숫자 형식을 수행하여 date +%Y%m%d%H%M파일에 넣은 다음 매분마다 cron에서 스크립트를 실행하는 것이었습니다. 그런 다음 파일의 날짜가 date 명령과 일치하면 스크립트가 작업을 수행합니다. 그런 다음 다음날 +3분 후에 파일을 업데이트합니다. 이를 달성하는 더 좋은 방법이 있습니까?

결과적으로 스크립트는 (예를 들어) 첫날 오전 4시, 둘째 날 오전 4시 3분, 셋째 날 오전 4시 6분에 실행됩니다. 1분마다 실행되지만 올바른 시간에만 실행됩니다(차단하는 경우).

문제와 해결책이 명확한가?

답변1

at스크립트(또는 래퍼)에서 이 명령을 사용할 수 있습니다. 다음 반복을 실행할 시간을 주십시오.

echo '/dir/scriptname' | at 'now + 1443 minutes'

드리프트를 줄이려면 이 줄을 스크립트 시작 부분에 최대한 가깝게 배치하세요.

답변2

at대신 을 사용해야 합니다 cron. 그러면 작업을 한 번만 실행할 수 있습니다. 그런 다음 자체적으로 재정렬될 수 있습니다.


글쎄, 당신이 그렇게 하겠다고 고집한다면 나는 당신의 솔루션에 대한 몇 가지 개선점을 제안하고 싶습니다. 그러나 스크립트는 여전히 다음을 통해 매분 실행되어야 합니다 cron.

스크립트가 마지막으로 실행된 시간을 설정하거나 추적하지 않고도 UNIX 타임스탬프를 사용하여 동일한 목표를 달성할 수 있습니다.

60*60*24 = 86400하루에는 몇 초가 있습니다 . 필요한 만큼 추가하면 몇 초의 시간이 3*60 = 480주어집니다 86880. 이는 정확히 스크립트를 실행하려는 간격입니다. 이제 스크립트에서 현재 UNIX 시간 %(모듈로 초)가 0인지 확인할 수 있으며, 그렇지 않으면 중단됩니다.

명확한 첫 번째 실행이 필요한 경우(예: 2012년 6월 5일 오전 4시) 먼저 1338861600현지 시간에서 관련 타임스탬프( )를 빼고 0보다 작지 않은지 확인한 다음 차이를 처리하면 됩니다. ..


물론 스크립트가 자체 crontab항목을 수정하도록 할 수도 있지만 이는 위험하고 약간 어색합니다.

답변3

스크립트를 수정하여 일부 플래그 파일을 확인하고 언제 먼저 실행할지 확인할 수 있습니다. 시간이 시작 시간과 일치하면 스크립트가 계속되고, 그렇지 않으면 종료 0으로 종료됩니다. 매분(또는 3분마다) cron에서 시작할 수도 있습니다. 귀하의 경우에는 충분할 것 같습니다. 플래그 파일에서 다음 런타임을 수정하려면 스크립트도 필요합니다. 이는 무작위로 재부팅하는 경우에도 시작을 놓치지 않을 정도로 안전합니다.

관련 정보