【发布时间】:2017-08-29 10:56:00
【问题描述】:
我必须每天在不同的时间运行一个命令。时间是预先知道的,并以熟悉的YYYY-MM-DD HH:MM:SS 格式保存在 MySQL 数据库中。
我的想法:
cron将作业安排在第一天的准确时间,然后让脚本自己修改crontab条目,并为第二天提供正确的时间。cron在大约正确的时间安排作业,然后让它从数据库中读取准确的时间并在此之前休眠。cron每分钟调度一次作业执行,留给脚本判断当前日期/时间是否对应正确的执行时间;是则执行,否则退出。at在第一天用at提交作业,然后让它从数据库中读取第二天的时间,然后用at重新提交。
其他信息:
该命令是一个 PHP 脚本,它编写当天的消息并将其发送给所有注册到该网站的用户。如果他们更好地解决这个问题,我可以考虑其他技术。我想保留重新启动服务器的能力(在预期的执行时间之外),而不必太担心工作会丢失,因此解决方案 1. 和 3. 在这方面看起来更好。我从在一天中的两个不同时间运行的两个命令开始,但我很快就会在每天的不同时间安排几十个类似的作业,所以我希望尽可能避免混乱.此时我可能会选择3。
问题: 是否有更好/首选/既定的方式来完成这项任务?欢迎使用上述以外的解决方案。我应该注意(您推荐的解决方案的)主要缺点是什么?
【问题讨论】:
-
没有 cron 作业可以精确地运行脚本,您将获得的最小尺寸是小时。小时从系统启动时开始,并从那时起重复。你应该寻找
anacron或类似的。 -
@suleiman 我认为
cron可以在指定的时间运行命令,精度为一分钟。为什么你会推荐anacron?我读到“Anacron 是台式机和笔记本电脑的 cron,并且不希望系统像服务器一样运行 24 x 7。”我正在运行一个服务器,它通常是 24x7 的。 -
@suleiman 我相信你这样说是错误的。最小间隔是一分钟,您可以指定一天中的精确时间,因此,关于它开始计算小时数的方式的考虑也是错误的。
-
我的玉米文件夹是:
/etc/cron.daily cron.hourly cron.monthly and cron.weekly没有别的。
标签: mysql linux job-scheduling ubuntu-server