Cron 작업을 45일마다 실행하는 것이 가능합니까? (약 1개월 반)

Cron 작업을 45일마다 실행하는 것이 가능합니까? (약 1개월 반)

crontab 문서를 읽은 후에 다음 일정을 기록하는 방법이 생각나지 않습니다. 정확히 45일마다 한 번씩 스크립트를 실행합니다.

우아한 솔루션을 아는 사람이 있습니까? 감사합니다.

답변1

45일이라는 기간은 그레고리력의 주, 월 또는 연도로 잘 나누어지지 않기 때문에 스크립트가 실행되는 날짜를 제한하고 원하는 모든 날짜에 스크립트가 실행되도록 할 수 있는 방법이 없습니다.

따라서 매일 명령을 실행해야 하며 45일 중 44일에는 아무 작업도 수행하지 않고 명령 자체가 반환되도록 해야 합니다.

예를 들어 스크립트를 03:17에 실행하려면 명령은 다음과 같습니다.

17 3 * * * /usr/local/bin/your-script

그리고 스크립트 내에서 다음을 수행할 수 있습니다.

#!/bin/bash
if [[ $[($(date +%s)/86400)%45] != 0 ]]
then
    return
fi

real things happen here

부품은 != 0처음 실행하려는 날짜에 따라 다른 번호를 사용할 수 있습니다. 그리고 스크립트가 아닌 crontab에 추가 논리를 배치하도록 선택할 수 있습니다. 개인적으로 스크립트에서 수행하는 것이 더 읽기 쉽다고 생각합니다.

시간대가 DST를 사용하는 경우 시계가 조정될 때 일정이 하루씩 바뀌는 것을 방지하기 위해 위의 사항을 조정해야 할 수도 있습니다. 정확한 세부 사항은 스크립트를 실행하기 위해 선택한 시간대와 시간에 따라 다릅니다.

답변2

두 개의 cronjob 항목을 사용해야 할 수도 있습니다. 첫 번째는 한 달 동안, 두 번째는 45일 동안입니다.

cron 이하에서 매월 사용

0 0 1 * *  your_script

45일 동안 이 크론 항목이 입력되었습니다.

10 13 * * *  test $(( `date +\%s`/24/60/60\%45 )) = 41 && your_script

아래 링크에서 45일 cron 일정에 대한 참조를 받았습니다.

https://stackoverflow.com/questions/8699075/how-to-set-cron-job-for-every-45-days

관련 정보