매월 말일에 실행할 CRON 작업을 만들어야합니다. cPanel을 사용하여 만들겠습니다.
도움을 주시면 감사하겠습니다. 감사
답변
아마도 가장 쉬운 방법은 세 가지 개별 작업을 수행하는 것입니다.
55 23 30 4,6,9,11 * myjob.sh
55 23 31 1,3,5,7,8,10,12 * myjob.sh
55 23 28 2 * myjob.sh
그러나 윤년에도 불구하고 2 월 28 일에 실행되므로 문제가 발생하면 다른 방법을 찾아야합니다.
그러나 일반적으로 다음과 같이 매월 1 일에 가능한 한 빨리 작업을 실행하는 것이 훨씬 쉽고 정확합니다 .
0 0 1 * * myjob.sh
그리고 처리 할 수있는 스크립트를 수정 이전 달의 데이터를.
이렇게하면 해당 월의 마지막 날짜를 파악하는 데 발생할 수있는 번거 로움이 제거되고 데이터를 처리한다고 가정 할 때 해당 월의 모든 데이터를 사용할 수 있습니다. 매월 마지막 날 5 분에서 자정까지 달리면 그 때부터 자정 사이에 발생하는 모든 것이 누락되는 것을 볼 수 있습니다.
이것은 대부분의 월말 작업에서이를 수행하는 일반적인 방법입니다.
당신은 여전히하면 정말 달의 마지막 날에 그것을 실행하려면, 하나의 옵션은 내일 (스크립트의 일부로하거나, 또는 crontab을 자체) 첫 번째 경우 단순히 감지하는 것입니다.
따라서 다음과 같습니다.
55 23 28-31 * * [[ "$(date --date=tomorrow +\%d)" == "01" ]] && myjob.sh
비교적 지능적인 date
프로그램 이 있다고 가정하면 좋은 시작이 될 것 입니다.
date
프로그램이 상대적인 날짜를 제공 할만큼 충분히 발전하지 않은 경우 다음 과 같이 내일의 날을 제공하는 매우 간단한 프로그램을 구성 할 수 있습니다 (의 전체 기능이 필요하지 않음 date
).
#include <stdio.h>
#include <time.h>
int main (void) {
// Get today, somewhere around midday (no DST issues).
time_t noonish = time (0);
struct tm *localtm = localtime (&noonish);
localtm->tm_hour = 12;
// Add one day (86,400 seconds).
noonish = mktime (localtm) + 86400;
localtm = localtime (&noonish);
// Output just day of month.
printf ("%d\n", localtm->tm_mday);
return 0;
}
그런 다음 사용합니다 ( tomdom
“내일의 날”로 불렀다고 가정 ).
55 23 28-31 * * [[ "$(tomdom)" == "1" ]] && myjob.sh
당신은 모두 이후 오류 검사를 추가하는 것을 고려할 수 있지만 time()
및 mktime()
반환 할 수 있습니다 -1
뭔가 잘못되면. 위의 코드는 단순성 때문에이를 고려하지 않았습니다.
답변
위의 방법 중 하나와 비슷하게 사용할 수있는 약간 더 짧은 방법이 있습니다. 그건:
[ $(date -d +1day +%d) -eq 1 ] && echo "last day of month"
또한 crontab 항목은 28 일에서 31 일까지만 확인하도록 업데이트 될 수 있습니다. 다른 날에는 무의미하게 실행되기 때문입니다. 당신에게 줄 것 :
0 23 28-31 * * [ $(date -d +1day +%d) -eq 1 ] && myscript.sh
답변
매월 1 일에 실행되도록 크론 작업을 설정합니다. 그런 다음 시스템 시계를 하루 앞당기도록 변경합니다.
답변
위키피디아 이후 이건 어때?
55 23 L * * /full/path/to/command
답변
paxdiablo의 솔루션을 적용 하여 2 월 28 일과 29 일에 실행합니다 . 29 일의 데이터가 28 일을 덮어 씁니다.
# min hr date month dow
55 23 31 1,3,5,7,8,10,12 * /path/monthly_copy_data.sh
55 23 30 4,6,9,11 * /path/monthly_copy_data.sh
55 23 28,29 2 * /path/monthly_copy_data.sh
답변
매월 매일 실행되도록 cron 작업을 설정하고 다음과 같은 쉘 스크립트를 실행하도록 할 수 있습니다. 이 스크립트는 내일이 오늘보다 적은지 (예 : 내일이 새 달인 경우) 확인한 다음 원하는대로 수행합니다.
TODAY=`date +%d`
TOMORROW=`date +%d -d "1 day"`
# See if tomorrow's day is less than today's
if [ $TOMORROW -lt $TODAY ]; then
echo "This is the last day of the month"
# Do stuff...
fi
답변
@Indie 솔루션을 기반으로하는 crontab에서 더 안전한 방법 ( date
+에 대한 절대 경로 사용 $()
은 모든 crontab 시스템에서 작동하지 않음) :
0 23 28-31 * * [ `/bin/date -d +1day +\%d` -eq 1 ] && myscript.sh