【发布时间】:2014-01-06 17:00:49
【问题描述】:
我有一个运行未知时间段的脚本,这取决于它的输入。数据量少时可以运行1小时,数据量大时可以运行8小时。 我需要定期运行它,尤其是在上一次运行完成后 2 小时。
有没有一个实用程序可以做到这一点?
【问题讨论】:
标签: linux events scheduler jobs
我有一个运行未知时间段的脚本,这取决于它的输入。数据量少时可以运行1小时,数据量大时可以运行8小时。 我需要定期运行它,尤其是在上一次运行完成后 2 小时。
有没有一个实用程序可以做到这一点?
【问题讨论】:
标签: linux events scheduler jobs
使用 'at' 而不是 'cron' 并在脚本末尾添加:
at now +2 hours $*
这意味着每次发生都是链式的 - 因此如果它异常终止,则不会安排下一个实例 - 但我认为没有添加大量代码/复杂性的更强大的解决方案。
【讨论】:
at 的推荐;这就是为什么这里最终成为评论的原因。
我不喜欢at提出的解决方案,所以这里有另一个解决方案:
使用cron 每两小时启动一次
在启动时,您的应用程序 (*) 会检查是否有 pidfile。
2.1 如果存在,则可能有另一个实例正在运行:读取文件的内容 (pid) 并查看该 pid 是否是现有进程、僵尸进程或其他进程的 pid。如果它是正在运行的现有进程的 pid,则退出。如果是僵尸进程的pid,那么之前的job就意外结束了,你必须删除pidfile并转到第3步。否则。
删除 pidfile 后,创建一个新文件并将 pid 放入其中。然后继续做你的工作。
*:为了不增加复杂性,我引用的这个应用程序也可以是一个简单的包装器,它使用exec 生成您的代码。
这个解决方案也可以很容易地编写脚本。
史努比BBT
【讨论】:
如果看起来很复杂,这里有另一个更脏的解决方案:
while true ; do
./your_application
sleep 7200
done
史努比BBT
【讨论】: