가끔씩 스크립트가 실행되도록 하는 가장 좋은 방법은 무엇입니까?

가끔씩 스크립트가 실행되도록 하는 가장 좋은 방법은 무엇입니까?

매월 실행하려면 특정 스크립트가 필요합니다(이 질문을 보고 있는 다른 사용자는 매일/매주/1년/5일 등을 실행해야 할 수도 있습니다).

cron을 사용하여 이 작업을 수행할 수 있다는 것을 알고 있습니다.

0 0 1 * * ./script.sh

하지만 해당 기간 동안 기계가 오프라인 상태인 경우(예: 특정 달의 1일에 정전되는 경우) 어떻게 될까요?

하나 있나요?우아한이 문제를 해결하시겠습니까? 아니면 값을 설정하기 위해 해당 스크립트에 서브루틴을 포함시킨 I've-run-this-month-already다음 매월 매일(또는 시작 시) 다른 스크립트를 실행하여 값을 확인해야 합니까?

고쳐 쓰다:

매월 초에 한 번씩 스크립트를 실행해야 합니다. 여러 가지 작업을 수행하기 위해 스크립트를 작성하는 동안 아래 코드를 만들었습니다. 누군가가 이 질문을 찾은 후 유용하다고 생각하는 경우를 대비하여 여기에 넣습니다.

# CHECK FOR THE OLD_MONTH FILE
if [ ! -e /usr/local/bin/system/old_month ]; then
        # CREATE IT IF IT DOESN'T EXIST WITH THIS MONTHS DATE
        echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/old_month
fi

# CREATE A NEW FILE EVERY TIME THIS SCRIPT IS RUN WITH THIS MONTHS DATE
echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/this_month

# CHECK IF OLD_MONTH AND THIS_MONTH ARE NOT THE SAME
if ! cmp /usr/local/bin/system/this_month /usr/local/bin/system/old_month > /dev/null 2>&1 ;
then
        # RUN YOUR RELEVANT CODE HERE #
        echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/old_month     # UPDATE THE VALUE IN OLD_MONTH SO THAT THEY WILL MATCH NEXT TIME
fi

답변1

당신은 그것을 사용할 수 있습니다아나크론이러한 이유로 시스템이 지속적으로 실행된다는 가정 없이 특정 간격으로 작업을 실행하도록 설계되었습니다. 작업이 한 달에 한 번 실행되어야 하는 경우 Anacron은 이전 달에 실행되었는지 확인하고 그렇지 않은 경우 실행합니다(그리고 다음 달에 다시 실행할 필요가 없다는 것을 기억하십시오).

Debian 파생 제품에서 Anacron은 Cron과 잘 작동하고 적절하게 처리합니다 /etc/cron.{daily,weekly,monthly}(따라서 Cron에서 월별 작업을 월별 작업으로 정의하면 /etc/cron.monthly적절하게 실행됩니다).

다른 시스템에서는 다음에서 월별 작업을 정의할 수 있습니다./etc/anacrontab.

답변2

fcron이 올바른 도구인 것 같습니다. "fcron은 시스템이 항상 실행되는지 아니면 주기적으로 실행되는지에 대해 가정하지 않습니다. 예를 들어 시스템 가동 시간 중 x시간 y분마다 작업을 수행하도록 fcron에 지시할 수 있습니다. 지정된 시간에 작업이 해당 시간 간격 내에 한 번만 나타납니다."

관련 정보