크론 타이밍이 얼마나 정확하고 결정적인지 알고 싶습니다. 11:00:00에 실행 중인 cronjob이 있고 해당 cron 작업에 매개변수로 시간을 전달한다고 가정합니다. 어떤 경우에도 매개변수의 시간이 다를 수 있습니까(예: 11:00:01)? 집행이 정확한 시간에 이루어질 것이라고 100% 확신할 수 있습니까? 서버 과부하나 예상치 못한 상황 등의 문제가 걱정됩니다. 영향을 미칠 수 있는 것이 있나요? 나는 그럴 수 있다고 생각한다.
또한 실제 시간이 아닌 예약된 실행 시간을 매개변수로 전달하는 방법도 알고 싶습니다. 실제 실행은 11:00:01과 같이 더 나중이라고 가정합니다. cronjob에 정의된 예약 시간(예: 11:00:00)과 cron 작업이 10분마다 실행되도록 설정된 경우 이 작업을 어떻게 수행합니까? 이 경우 스크립트가 실행될 때마다 매개변수로 제공되도록 예약된 시간을 얻을 수 있습니까?
10 * * * * /tmp/script.sh $(date)
답변1
내 시스템 로그를 확인해 보면 cron 작업이 일반적으로 매분 1초에 시작되는 것을 알 수 있습니다(Ubuntu 20.04). (예: 501은 에서 트리거됩니다 05:10:01
.) 내 시스템에서는 매우 안정적이지만 보장할 수는 없습니다.
과부하 상태에서는 cronjob이 적시에 실행되더라도 상황이 더 악화될 수 있습니다.극도로부하가 심한 경우 지연될 수 있음파기1초 이상. 그러나 이러한 과도한 부하로 인해 시작 시간이 무의미해질 정도로 스크립트 속도가 느려집니다.
Cron은 때때로 작업을 건너뛸 수 있고 건너뛰기도 합니다. 예를 들어 시스템이 다운되면 결코 따라잡을 수 없습니다. 이 댓글에 특히 주의하겠습니다.수동:
이는 존재하지 않는 시간(예: 일광 절약 시간제 전환 중 "누락된 시간")이 일치하지 않아 "누락된 시간" 동안 예약된 작업이 실행되지 않는다는 것을 의미합니다. 마찬가지로 일광 절약 시간제 전환 중에 여러 번 발생하는 경우 일치 작업이 두 번 실행됩니다.
05:10:01이 아닌 05:10:02에 실행될 때 코드가 중단되지 않는지 확인하세요.
어떤 작업이 실행 중인지 알려주는 cron을 얻는 우아한 방법은 없습니다. 서로 다른 시간에 실행되도록 여러 개의 동일한 작업을 설정할 수 있으며 각각의 작업은 시간을 매개변수로 전달합니다. 두 가지 옵션이 있습니다.
항목이 많은 crontab 설정
아래 댓글을 확인해주세요.
예, 하루는 1440분이므로 해당 분 동안 crontab을 실행해야 하는 경우 crontab을 생성하는 스크립트가 필요할 수 있습니다.
#!/bin/bash
for hour in {0..23} ; do
for minute in {0..59} ; do
echo "${minute} ${hour} * * * root /path/to/script.sh ${hour}:${minute}:01"
done
done > /etc/cron.d/my-job
당신은 다음과 같이 끝날 것입니다 :
01 00 * * * root my-job 00:01:01
02 00 * * * root my-job 00:02:01
03 00 * * * root my-job 00:03:01
...
가장 가까운 예상 실행을 찾기 위한 래퍼 스크립트 만들기
현재 시간을 확인하고 가장 최근 항목을 찾는 래퍼 스크립트를 만드는 것이 더 나을 것입니다. 작업이 15분마다 실행되도록 설정된 경우 다음을 사용할 수 있습니다.여기에 제공된 예:
#!/bin/bash
curdate=`date "+%s"`
run_time=$(($curdate - ($curdate % (15 * 60))))
run_time_arg=$(date -d"@$run_time" "+%H:%M:%S")
/path/to/script.sh $run_time_arg
이는 GNU 특정 동작을 사용하며 date
모든 구현에서 작동하지 않을 수 있습니다.