X 분마다 cronjob을 실행하는 방법은 무엇입니까?
cronjob에서 PHP 스크립트를 실행하고 있으며 5 분마다 이메일을 보내고 싶습니다.
내 현재 (crontab) cronjob :
10 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1
cronmail.php는 다음과 같습니다.
<?php
$from = 'D'; // sender
$subject = 'S';
$message = 'M';
$message = wordwrap($message, 70);
mail("myemail@gmail.com", $subject, $message, "From: $from\n");
?>
하지만이 구성으로 30 분 동안 이메일을받지 못했습니다.
A의 crontab
파일의 필드는 다음과 같습니다
- 분.
- 시간.
- 월의 일.
- 올해의 달.
- 요일.
그래서:
10 * * * * blah
blah
매시간 10 분에 실행한다는 의미 입니다.
5 분마다 원하는 경우 다음 중 하나를 사용하십시오.
*/5 * * * * blah
1 분마다 5 분마다 만 의미합니다.
0,5,10,15,20,25,30,35,40,45,50,55 * * * * blah
표기법을 cron
이해하지 못하는 이전 실행 파일의 경우 */x
.
그 후에도 여전히 작동하지 않는 것 같으면 명령을 다음과 같이 변경하십시오.
date >>/tmp/debug_cron_pax.txt
파일이 5 분마다 기록되는지 확인합니다. 그렇다면 PHP 스크립트에 문제가있는 것입니다. 그렇지 않다면 cron
데몬에 문제가있는 것입니다 .
CRON은 다음과 같아야합니다.
*/5 * * * *
CronWTF 는 CRON 설정을 테스트해야 할 때 정말 유용합니다.
터미널에서 오류를 볼 수 없기 때문에 스크립트에서 오류가 발생하는지 확인할 수 있도록 출력을 로그 파일로 파이프하는 것이 좋습니다.
또한 PHP 파일 맨 위에있는 shebang을 사용하여 시스템에서 PHP를 찾을 수있는 위치를 알 수 있습니다. 예 :
#!/usr/bin/php
이렇게하면이 모든 것을 이렇게 부를 수 있습니다.
*/5 * * * * php /path/to/script.php > /path/to/logfile.log
매시간 10 분에 실행되도록 크론을 설정하고 있습니다. 변경하도록
설정하려면every 5 mins
*/5 * * * * /usr/bin/php /mydomain.in/cronmail.php > /dev/null 2>&1
cronjob이 작동하는지 확인하는 2 단계 :
- cronjob을 실행하는 사용자로 서버에 로그인합니다.
수동으로 php 명령 실행 :
/ usr / bin / php /mydomain.in/cromail.php
그리고 오류가 표시되는지 확인하십시오.
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
x 분으로 설정하려면 첫 번째 인수에 x 분을 설정 한 다음 스크립트 경로를 설정해야합니다.
15 분
*/15 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1
n
분 마다 크론을 실행하려는 경우 값에 따라 몇 가지 가능한 옵션이 있습니다 n
.
n
60을 나눈다 (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30)
여기서 해결책은 /
표기법 을 사용하여 간단합니다 .
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
m-59/n * * * * command
위에서 n
는 값 n
을 m
나타내며 n
또는 보다 작은 값 을 나타냅니다 *
. 이것은 분에 명령을 실행합니다m,m+n,m+2n,...
n
60을 나누지 않음
If n
does not divide 60, you cannot do this cleanly with cron but it is possible. To do this you need to put a test in the cron where the test checks the time. This is best done when looking at the UNIX timestamp, the total seconds since 1970-01-01 00:00:00 UTC
. Let's say we want to start to run the command the first time when Marty McFly arrived in Riverdale and then repeat it every n
minutes later.
% date -d '2015-10-21 07:28:00' +%s
1445412480
For a cronjob to run every 42
nd minute after `2015-10-21 07:28:00', the crontab would look like this:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
* * * * * minutetestcmd "2015-10-21 07:28:00" 42 && command
with minutetestcmd
defined as
#!/usr/bin/env bash
starttime=$(date -d "$1" "+%s")
# return UTC time
now=$(date "+%s")
# get the amount of minutes (using integer division to avoid lag)
minutes=$(( (now - starttime) / 60 ))
# set the modulo
modulo=$2
# do the test
(( now >= starttime )) && (( minutes % modulo == 0 ))
Remark: UNIX time is not influenced by leap seconds
Remark: cron
has no sub-second accuracy
참고URL : https://stackoverflow.com/questions/25740573/how-to-run-a-cronjob-every-x-minutes
'developer tip' 카테고리의 다른 글
django 템플릿에서 "none"에 해당하는 것은 무엇입니까? (0) | 2020.10.16 |
---|---|
Twitter Bootstrap 3의 절반 열 (0) | 2020.10.16 |
AngularJS 1.5+ 구성 요소는 감시자를 지원하지 않습니다. 해결 방법은 무엇입니까? (0) | 2020.10.16 |
확산 구문을 사용하는 ES6의 전체 복사 (0) | 2020.10.16 |
Python에서 객체 목록 검색 (0) | 2020.10.15 |