我在上午9点,上午9点15分,上午10点有一份约会清单,约会是动态安排的。我必须在预定时间内发送推送通知。
请建议执行计划,因为我认为这不是最佳解决方案。
答案 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