PHP,crontab,DateInterval:将人类可读的间隔转换为crontab格式

时间:2011-02-23 21:06:57

标签: php linux datetime cron intervals

我对crontab间隔格式有点困惑。关键是我希望从人类可读的字符串中获取间隔,例如“20分钟”,“16小时30分钟”。这是由PHP DateTime already完成的。但我需要的是将crontab-valid字符串作为exec(sprintf('echo "%s %s %s * * %s" | crontab', $minute, $hour, $day, $command));传递。无论如何,这里是示例PHP脚本

<?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]);

及其输出:

serge@serge-laptop:~/www/bin$ php periodical.php '2 hours 25 minutes'
Days:       0
Hours:      2
Minutes:    25
COMMAND:    echo "*/25 */2 * * * %command%" | crontab

那么,“* / 25 * / 2 * * *”cron值是否匹配运行命令EACH 2小时25分钟?或者它应该是“0/25 0/2 * * *”之类的东西?我不清楚手册页。以及如何与日子一起行动?

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

解: 使用双组分值作为间隔,并建议使用20分钟,3小时,4天等值。

2 个答案:

答案 0 :(得分:2)

*/25 */2 * * *表示在0:00,0:25,0:50,2:00,2:25,2:50,4:00,4:25,4:50等... < / p>

25 */2 * * *表示0:25,2:25,4:25,6:25等......

0/25 0/2 * * *仅表示0:25

编辑 - 更新后

据我所知,crontab中的单行无法做到这一点。指定您的cron作业运行的时间的机制并不意味着这种复杂性。 但是,如果您确实需要2h25功能,则可以在crontab中有9个或10个条目,同一脚本的时间不同

答案 1 :(得分:1)

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