2011-02-23 96 views
2

我对crontab间隔格式有点混淆。重点是我想从“20分钟”,“16小时30分钟”等人类可读字符串中获得间隔。这由PHP DateTime already完成。但我需要的是传递crontab的有效字符串为exec(sprintf('echo "%s %s %s * * %s" | crontab', $minute, $hour, $day, $command));。总之,这里是样品的PHP脚本PHP,crontab,DateInterval:将人可读的间隔转换为crontab格式

<?php 
function getCrontabInterval($timestring) 
{ 
    $interval = DateInterval::createFromDateString($timestring); 

    $minute = $interval->i > 0 ? "*/{$interval->i}" : '*'; 
    $hour = $interval->h > 0 ? "*/{$interval->h}" : '*'; 
    $day = $interval->d > 0 ? "*/{$interval->d}" : '*'; 
    $crontab = sprintf('echo "%s %s %s * * %s" | crontab', $minute, $hour, $day, '%command%'); 

    echo "Days:\t\t", $interval->d, "\n", 
     "Hours:\t\t", $interval->h, "\n", 
     "Minutes:\t", $interval->i, "\n", 
     "COMMAND:\t", $crontab, "\n"; 
} 


getCrontabInterval($_SERVER['argv'][1]); 

,其输出:

[email protected]:~/www/bin$ php periodical.php '2 hours 25 minutes' 
Days:  0 
Hours:  2 
Minutes: 25 
COMMAND: echo "*/25 */2 * * * %command%" | crontab 

所以,将把 “*/25 */2 * * *” 的cron值匹配运行命令每次2小时25分钟?或者它应该像“0/25 0/2 * * *”一样?从手册中我不清楚。以及如何与天行事?

UPD:在每个 “2小时25分钟” 我的意思在0:00运行,2:25,4:50,7:15和等

SOLUTION: 使用双组分值用于与间隔一些手动建议使用20分钟,3小时,4天等数值。

+0

你想每2小时25分钟运行一次吗?或者每2小时25分钟? – 2011-02-23 21:14:44

+0

我的意思是0:00,2:25,4:50,7:15等 – 2011-02-23 21:23:16

回答

2

*/25 */2 * * *意味着在0:00,0:25,0:50,2:00,2:25,2:50, 4:00,4:25,4:50等..

25 */2 * * *意味着0:25,2:25,4:25,6:25,等等

0/25 0/2 * * *意味着0:25只有

编辑 - 您的更新

据我所知,之后就没有办法在一个crontab一行来做到这一点。指定你的cron作业在什么时间运行的机制并不意味着这种复杂性。 然而,如果你确实需要2h25的功能,你可以在你的crontab中有9或10个不同时间的条目到相同的脚本

+0

将修改此选项。我认为我会减少一切到“25分钟” - >“*/25 * * * * *”,“2小时” - >“* */2 * * *”(或0 */2 * * * ...),“3天” - >“* * */3 * *” – 2011-02-23 21:43:49

1

字符串“*/25 */2 * * *”将每2小时运行命令每个25分钟
字符串“25 */2 * * *“将运行命令每2小时25分钟

+1

25 */2 * * *'只能在0:25,2:25,4:25等时运行。? – Damp 2011-02-23 21:32:51