我对crontab的间隔格式有点困惑。我的意思是,我想从可读字符串(如“20分钟”,“16小时30分钟”)中获取间隔时间。这可以通过PHP DateTime已经实现。但我需要传递一个符合crontab规范的字符串作为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值会匹配每2小时25分钟运行一次的命令吗?还是应该类似于“0/25 0/2 * * *”这样的形式?从 manpages 中无法清楚地了解。那么对于日期,该怎么处理呢?
更新:在“每2小时25分钟”下,我指的是在0:00、2:25、4:50、7:15等时间运行。
解决方案:使用两个组件值的间隔,并建议手动使用20分钟、3小时、4天等值。