source

X분마다 cronjob을 실행하는 방법

factcode 2022. 10. 13. 23:36
반응형

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분 동안 이메일을 받지 못했습니다.

crontab파일, 필드는 다음과 같습니다.

  • 1분간의 분요.
  • 하루 중 시간
  • 요일
  • 일 년 중 한 달
  • 요일

그래서:

10 * * * * blah

실행 수단blah매시간 10분마다.

5분마다 다음 중 하나를 사용합니다.

*/5 * * * * blah

매 분마다를 의미하지만 매 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

cron을 실행하는 간격n분 단위. 의 값에 따라 몇 가지 가능한 옵션이 있습니다.n.

n60(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,...

n60은 나누지 않는다

한다면n는 60을 분할하지 않습니다.cron에서는 깔끔하게 할 수 없지만 가능합니다.이를 수행하려면 테스트에서 시간을 확인하는 cron에 테스트를 넣어야 합니다.이것은 UNIX 타임스탬프를 참조할 때 가장 적합합니다.이 타임 스탬프는, 다음의 경과 후의 합계 초수입니다.1970-01-01 00:00:00 UTCMarty McFly가 Riverdale에 도착했을 때 명령어를 처음 실행한 후 매번 반복한다고 가정해 봅시다.n몇 분 후에.

% date -d '2015-10-21 07:28:00' +%s 
1445412480

cronjob을 실행하는 간격42 이후 과 같이 '2015-10-21 07:28:00' > crontab을 사용하다.

# 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

minutetestcmd로 정의되다

#!/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 ))

비고: UNIX 시간은 윤초의 영향을 받지 않습니다.

cron 미만의 정확도는 .

.cron은 마다 실행됩니다.
「 」로 every 5 mins로로 로 */5 * * * * /usr/bin/php /mydomain.in/cronmail.php > /dev/null 2>&1

cronjob이 동작하고 있는지 확인하기 위한 2단계:

  1. cronjob을 실행하는 사용자와 함께 서버에 로그인합니다.
  2. 수동으로 php 명령 실행:

    /usr/bin/http/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

언급URL : https://stackoverflow.com/questions/25740573/how-to-run-a-cronjob-every-x-minutes

반응형