크론 오프셋 5 분 일정


22

5 분마다 실행되도록 cron 스크립트 세트를 오프셋 할 수 있습니까?

두 개의 스크립트가 있습니다. 스크립트 1은 한 데이터베이스에서 일부 데이터를 수집하여 다른 데이터베이스에 삽입합니다. 스크립트 2는이 데이터와 다른 많은 데이터를 가져 와서 예쁜 보고서를 만듭니다. 두 스크립트는 5 분마다 실행해야합니다. 새 데이터에서 보고서를 작성할 수 있도록 스크립트 2를 1 분씩 오프셋하려고합니다. EG 스크립트 1을 실행 :00, :05, :10, :15 [...]하고 스크립트 2를 :01, :06, :11, :16 [...]매시간마다 실행하고 싶습니다 . 스크립트는 서로 종속되지 않으며 스크립트 2의 성공 여부에 관계없이 스크립트 2를 실행해야합니다. 그러나 보고서에 최신 데이터가있을 수 있으면 유용합니다. cron에서 가능합니까?

게시하다;
쉘 스크립트에서 두 명령을 모두 사용하여 서로 즉시 실행되도록 생각했지만 작동하지 않을 수 있습니다. 때로는 스크립트 1이 외부 API 등을 기다리는 동안 중단 될 수 있으므로 실행하는 데 최대 15 분이 걸릴 수 있습니다. 스크립트 2는 5 분마다 실행되어야 하므로이 방법으로 스크립트 2의 실행을 중지 / 지연해야합니다 .Cron에서 이것을 설정할 수 있다면 스크립트 1이 무엇을하고 있든 상관없이 스크립트 2가 실행됩니다

답변:


14

를 사용할 때마다 스크립트를 실행할 수 있습니다 cron. 5 분마다 스크립트 1을 실행하려면 다음과 같이 시작할 수 있습니다.

*/5 * * * * /path/to/script1

그러나 이것은 실제로 다음과 같은 속기입니다.

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /path/to/script1

스크립트 1 후 1 분 후에 스크립트 2를 실행하려면 다음을 수행하십시오.

1,6,11,16,21,26,31,36,41,46,51,56 * * * * /path/to/script2

당신은 또한 이것을 할 수 있습니다 :

*/5 * * * * /path/to/script1
*/5 * * * * /path/to/script2

그런 다음 스크립트 2가 시작될 때 1 분간 잠을 자십시오.

sleep 60

4
스크립트 자체에 수면을 두는 것은 프롬프트에서 손으로 스크립트를 실행하게 만드는 추악한 해킹입니다. crontab 항목의 수면 부분을 만들어 해킹하는 방법덜 추악 하지만 더 우아한 방법은 올바른 crontab 표기법을 사용하여 작업을 상쇄하는 것입니다.
Caleb

39

crontab의 분 입력 필드는 수학적인 "나누기"연산자처럼 보이지만 그렇지 않기 때문에 혼동스러운 "증가"연산자를 허용합니다. 가장 자주 다음과 같은 것을 사용하는 것을 볼 수 있습니다. 이것은 5로 나눌 수있는 숫자를 찾지 않지만 세트에서 다섯 번째 항목을 모두 가져옵니다.

 */5 * * * * command

이것은 cron에게 /5분 단위 0-59 ( *) 의 5 번째 항목 ( ) 과 일치하도록 지시 하지만 다음과 같이 설정을 변경할 수 있습니다.

 1-59/5 * * * * command

6 분, 11 분, 16 분 등에서 명령을 실행하는 세트 1-59에서 5 번째 항목마다 소요됩니다.

1 분보다 더 미세한 오프셋이 필요한 경우 다음과 같이 crontab의 일부로 sleep 명령을 사용하여 해킹 할 수 있습니다.

 */5 * * * * sleep 15 && command

이렇게하면 5 분마다 작업이 실행되지만 분 후에 15 초가 될 때까지 명령이 실제로 시작되지 않습니다. 뭔가 다른 것을 몇 초 만에 수행하는 짧은 실행 작업의 경우 완전히 늦고 싶지는 않지만 간단합니다.


1
이것은 허용되는 것보다 더 나은 대답입니다. 범위를 통한 오프셋 설정은 수면보다 훨씬 깨끗합니다.
ND Geek

11

+ 기호로 시간 오프셋을 표시 할 수 있습니다. 예를 들어에서 실행하려면 다음 :01, :06, :11, :16 [...]과 같은 작업을 만듭니다.

*/5+1 * * * * command

7
이 크론의 일부 버전에서 작동하지 않는 것
jhoff

1
이 구문을 지원하는 어떤 버전의 크론을 사용하고 있습니까? Cronie는 그것을 지원하지 않는 것 같습니다.
Matthew G

CentOS7에 Cronie가 있으므로이 솔루션을 먼저 시도하지 않습니다.
AnneTheAgile

1

이것은 나를 위해 일했다 :

1/5 * ? * * *

여기서 1은 오프셋 분입니다. 따라서 3 분을 상쇄하려면 다음을 수행하십시오.

3/5 * ? * * *

AWS 스케줄 설정에서 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.