我必须每天在不同的时间运行一个命令。时间是事先知道的,并以熟悉的YYYY-MM-DD HH:MM:SS
格式保存在MySQL数据库中。
我的想法:
cron
安排作业第一天的确切时间,然后让脚本本身修改crontab
条目,并在第二天使用正确的时间。
cron
在大约的时间安排作业,然后让它从数据库中读取完全时间并一直睡到那时。< / p>
cron
每分钟安排作业执行,并将其留给脚本以确定当前日期/时间是否对应于正确的执行时间;如果是,则退出,否则退出。
at
使用at
在第一天提交作业,然后在第二天从数据库中读取该作业,然后使用at
重新提交。{/ p >
其他信息:
该命令是一个PHP脚本,它组成当天的消息并将其发送给注册到该网站的所有用户。如果能更好地解决这个问题,我可以考虑其他技术。我希望保留重新启动服务器的能力(在预期的执行时间之外),而不必过多担心丢失的工作,因此解决方案1.
和3.
在这方面看起来更好。我开始时有两个命令要在一天的两个不同时间运行,但我很快就会在每天的不同时间安排几十个类似的工作,所以我宁愿尽可能地避免混乱。我此时可能会选择3
选项。
问题: 是否有更好/首选/已建立的方式来完成此任务?其他上述解决方案是值得欢迎的。我应该注意哪些主要缺点(推荐的解决方案)?
答案 0 :(得分:0)
我相信你需要构建自定义应用程序来实现你想要实现的逻辑。
最终,您可以使用cron系统启动进程或确保进程正在运行(如果它已经死亡或被杀死)。
在我的位置,我要做的是编写一个执行以下操作的自定义PHP程序(或python或你的名字):
另一种方法是检查每次执行计划,以检查计划中的变化。
另一个人将被阅读一次并一直睡到执行时间,但在另一个案例中你不会记录时间表的变化
这一切都取决于你,所有程序都非常简单
答案 1 :(得分:0)
我最终使用上面的解决方案3.
,到目前为止我对它非常满意。
所有逻辑都在.php
文件中,该文件负责:
$now
)这实际上允许合理程度的灵活性:
如果存在某个信号量文件,我可以选择不运行任何命令:
if (file_exists($filename)) {exit;}
我可以在选项文件中设置参数,例如调试或测试模式:
include parameters.php
if ($debug === true) {error_reporting(E_ALL);}
如果是新的一年,我可以避免打扰用户:
if (date('m-d') == '01-01') {exit;}
我可以根据自定义逻辑引入延迟:
if (date('w', strtotime($now)) === '0') {$now = date('Y-m-d H:i:s', strtotime($now . ' +15 minutes'));}