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가 실행됩니다
답변
를 사용할 때마다 스크립트를 실행할 수 있습니다 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
답변
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 초가 될 때까지 명령이 실제로 시작되지 않습니다. 뭔가 다른 것을 몇 초 만에 수행하는 짧은 실행 작업의 경우 완전히 늦고 싶지는 않지만 간단합니다.
답변
+ 기호로 시간 오프셋을 표시 할 수 있습니다. 예를 들어에서 실행하려면 다음 :01, :06, :11, :16 [...]
과 같은 작업을 만듭니다.
*/5+1 * * * * command
답변
이것은 나를 위해 일했다 :
1/5 * ? * * *
여기서 1은 오프셋 분입니다. 따라서 3 분을 상쇄하려면 다음을 수행하십시오.
3/5 * ? * * *
AWS 스케줄 설정에서 작동합니다.