PHP - CRON,安排一个php脚本在每个动态时间表上运行推送通知

时间:2017-05-16 04:58:57

标签: php redis cron

我在上午9点,上午9点15分,上午10点有一份约会清单,约会是动态安排的。我必须在预定时间内发送推送通知。

  • 由于HR的预定时间是动态的或可编辑的。
  • 我每隔一分钟就跑一个cron,如果我发现计划时间不足,那么cron就像每一分钟一样运行。

请建议执行计划,因为我认为这不是最佳解决方案。

2 个答案:

答案 0 :(得分:0)

您所遵循的方法是正确的。由于约会是动态安排的,因此可以随时进行。每分钟运行一次cron并在脚本中检查是否有任何约会的计划时间已到达且通知发送为false。触发这些约会的通知,并将发送的通知设置为true。

答案 1 :(得分:0)

直接从PHP编辑crontab

我在资源有限的系统上使用的一个技巧是编辑crontab本身而不是每60秒不断调用一个PHP脚本。 将crontab转换为PHP数组可以轻松完成计划任务。

使用array_push

可以完成添加任务
<?PHP
$newcron='00 09 * * * /usr/bin/PHP /fullPath/myPhpScript.php';    // New time and task         
$crons= explode( PHP_EOL ,shell_exec('crontab -l')); 
array_push($crons,$newcron);
file_put_contents('/tmp/crontab.txt', implode (PHP_EOL,$crons));
echo exec('crontab /tmp/crontab.txt');
?>

可以使用未设置

来完成删除任务
<?PHP
$crons= explode( PHP_EOL ,shell_exec('crontab -l')); 
unset($crons[1]);                                       //Task entry to remove
file_put_contents('/tmp/crontab.txt', implode (PHP_EOL,$crons));
echo exec('crontab /tmp/crontab.txt');
?>

Crontab格式为:

* * * * *    /usr/bin/php /fullPath/myPhpScript.php
| | | | |    | 
| | | | |    +-- Command to call your script             
| | | | +---- Day of the Week   (range: 1-7, 1 standing for Monday)
| | | +------ Month of the Year (range: 1-12)
| | +-------- Day of the Month  (range: 1-31)
| +---------- Hour              (range: 0-23)
+------------ Minute            (range: 0-59) 

如果你的约会时间是9:00,9:15和10:00,你可以从crontab开始,类似于下面的那个。

00 09 * * * /usr/bin/PHP /fullPath/0900PushNotifyList.php
15 09 * * * /usr/bin/PHP /fullPath/0915PushNotifyList.php
00 10 * * * /usr/bin/PHP /fullPath/1000PushNotifyList.php

有关crontab命令和格式的更多信息,请访问https://stackoverflow.com/tags/crontab/info