Cron vs Programmatic Repetition?

时间:2015-08-02 17:19:22

标签: cron

我希望每x分钟定期运行一个Python脚本。让cron启动它或在Python中有一个睡眠运行周期更好吗?我认为以下是要做出决定的要点。如果我错过了,请告诉我。我想这不仅与Python有关,而且在更一般的意义上也适用。

  • 错误/异常处理 - 如果脚本爆炸,cron可以再次启动它。对于脚本,我仍然可以使用全局try-catch并解决此问题。
  • 多次运行的内存泄漏对Cron来说更好,因为它会在重复运行的Python脚本上累积
  • 线程重叠是我使用Cron的最大问题 - 我不想让脚本的多个实例运行,我不能100%确定运行是否会在inter-cron间隔内完成。在这种情况下,我觉得Python模型比Cron更好。

2 个答案:

答案 0 :(得分:1)

您的论点指向了cron解决方案。

使用信号量/锁可轻松处理cron重叠问题。例如,Linux附带了flock命令,它简单易用,可以在shell脚本中使用。有关示例,请参阅http://linux.die.net/man/1/flock

在bash脚本中,如果您从这段代码开始:

exec 200>/var/run/yourscript.lock
flock -n 200 || exit 1
// exec your script here

脚本将建立一个独占锁,或者以代码1退出。您可以通过执行python脚本来执行此操作。这可以防止重叠运行。当bash脚本结束时,将释放文件句柄。

答案 1 :(得分:0)

建议的守护程序(python)脚本是一个可行的解决方案。您可以使用python库来简化任务。

为了避免内存泄漏,您应该通过子进程库将周期性python脚本作为单独的进程执行,并捕获退出状态。