Cron作业是否会覆盖自己

时间:2015-07-07 21:03:37

标签: linux bash unix ubuntu

我似乎无法让我的脚本在Ubuntu 14上通过cron每分钟并行运行。

我创建了一个每分钟执行一次的cron作业。 cron作业执行一个运行时间超过一分钟的脚本。当一分钟到期时,似乎新的cron执行会覆盖先前的执行。它是否正确?欢迎任何想法。

我需要并发的独立运行作业。 cron作业运行一个查询mysql数据库的脚本。我们的想法是在自己的进程中轮询db- if yes执行脚本。

3 个答案:

答案 0 :(得分:2)

cron不会停止先前执行的流程以启动新流程。即使旧流程仍在运行,cron也会启动新流程。

如果你需要cron来终止上一个进程,你需要修改你的脚本来处理它自己。

答案 1 :(得分:0)

这种现象很常见。尝试在脚本中添加一个检查以查看锁定文件是否已存在。如果是,退出。如果没有,继续。

Cronjobs没有超支。然而,他们确实有重叠的可能性。除非您的脚本明确杀死任何预先存在的进程,否则它应该无法停止以前运行的脚本。

然而,引入锁定文件的概念将使您免于所有这些混淆。

答案 2 :(得分:0)

您需要一种锁定机制来识别脚本已在运行。

有几种方法可以做到这一点,但你需要小心使用原子方法。

我使用锁目录,因为创建目录保证是原子的 -

LOCKDIR=/tmp/myproc.lock

if ! mkdir $LOCKDIR >/dev/null 2>&1
then
  print -u2 "Processing already running - terminating"
  exit 1
fi

trap "rm -rf $LOCKDIR" EXIT