如何每X分钟运行一次cronjob?

Sav*_*aun 80 php cron cron-task

我在cronjob中运行PHP脚本,我想每5分钟发送一次电子邮件

我目前的(crontab)cronjob:

10 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

cronmail.php如下:

<?php
$from = 'D'; // sender
$subject = 'S';
$message = 'M';
$message = wordwrap($message, 70);
mail("myemail@gmail.com", $subject, $message, "From: $from\n");
?>
Run Code Online (Sandbox Code Playgroud)

但是我在30分钟内没有收到有关此配置的电子邮件.

pax*_*blo 132

crontab文件中,字段为:

  • 分钟.
  • 一天中的一小时.
  • 这个月的某一天.
  • 一年中的一个月.
  • 一周中的天.

所以:

10 * * * * blah
Run Code Online (Sandbox Code Playgroud)

意味着blah每小时过去10分钟执行一次.

如果您每五分钟一次,请使用以下任一方法:

*/5 * * * * blah
Run Code Online (Sandbox Code Playgroud)

意思是每分钟但只有每五分钟,或者:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * blah
Run Code Online (Sandbox Code Playgroud)

对于cron不理解*/x符号的旧可执行文件.

如果在此之后它仍然无法工作,请将命令更改为:

date >>/tmp/debug_cron_pax.txt
Run Code Online (Sandbox Code Playgroud)

并监视该文件以确保每五分钟写一次.如果是这样,那么PHP脚本就出现了问题.如果没有,你的cron守护进程有问题.


Gar*_*nes 27

你的CRON应该是这样的:

*/5 * * * *

当您需要测试CRON设置时,CronWTF非常有用.

将输出传递到日志文件可能是一个好主意,这样你就可以看到你的脚本是否也抛出了任何错误 - 因为你不会在终端中看到它们.

还可以尝试在PHP文件的顶部使用shebang,这样系统就知道在哪里可以找到PHP.如:

#!/usr/bin/php

这样你可以像这样调用整个事情

*/5 * * * * php /path/to/script.php > /path/to/logfile.log

  • 仅供参考,CronWTF不再起作用。 (4认同)
  • 您是否尝试过手动运行脚本而不是通过cron运行脚本?问题实际上可能与脚本本身有关. (2认同)

Jus*_*nas 6

您将 cron 设置为每小时运行第 10 分钟。
将其设置为every 5 mins更改为*/5 * * * * /usr/bin/php /mydomain.in/cronmail.php > /dev/null 2>&1


kva*_*our 5

如果您想每n分钟运行一次 cron ,根据 的值,有几个可能的选项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
Run Code Online (Sandbox Code Playgroud)

上式中,n表示值nm表示小于n或的值*。这将在几分钟内执行命令m,m+n,m+2n,...

n 不能除以 60

如果n不除以 60,则不能用 cron 干净利落地做到这一点,但这是可能的。为此,您需要在测试检查时间的 cron 中进行测试。最好在查看 UNIX 时间戳(自1970-01-01 00:00:00 UTC. 假设我们想在 Marty McFly 到达 Riverdale 时第一次开始运行命令,然后每n分钟重复一次。

% date -d '2015-10-21 07:28:00' +%s 
1445412480
Run Code Online (Sandbox Code Playgroud)

对于42在“2015-10-21 07:28:00”之后每nd 分钟运行一次的 cronjob ,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
Run Code Online (Sandbox Code Playgroud)

minutetestcmd定义为

# 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
Run Code Online (Sandbox Code Playgroud)

备注: UNIX时间不受闰秒影响

备注: cron没有亚秒级精度