是否可以将检查PID用于罕见的异常?

时间:2016-12-22 16:03:39

标签: bash scripting cron

我读过this interesting question,基本上说我应该总是避免达到非子进程的进程的PID。它解释得很好并且非常有意义。

但是,虽然OP试图做一些cron不应该做的事情,但我处于一个非常不同的情况:

  1. 我想每隔5分钟运行一个进程,但是一次运行一百次需要花费5分多钟才能运行(我不能同时运行两个实例)。
  2. 我不想杀死或操纵其他进程,如果进程的另一个实例正在运行,我只想结束我的进程而不做任何事情。
  3. 在这种情况下,获取“非子进程”的PID是否可以?如果是这样,我该怎么做?

    我尝试过if pgrep "myscript"; then ...或类似的东西,但是进程找到了自己的PID。我需要检测它是否找到多个

    (最初在被重定向之前我读了this question,但是给出的解决方案不起作用:它可以使用它给出进程的pid)

    编辑:我之前应该提到它,但如果脚本已经在使用中,我仍然需要在日志文件中写一些东西,至少:date>>script.log; echo "Script already in use">>script.log",我可能是错了,但我认为flock不允许这样做。

1 个答案:

答案 0 :(得分:1)

使用lckdoflock以避免重复播放。

DESCRIPTION
       lckdo runs a program with a lock held, in order to prevent multiple
       processes from running in parallel. Use just like nice or nohup.

       Now that util-linux contains a similar command named flock, lckdo is
       deprecated, and will be removed from some future version of moreutils.

当然,您可以自己实现这种原始锁定文件功能。

if [ ! -f /tmp/my.lock ];then
     touch /tmp/my.lock
     run prog
     rm -f /tmp/my.lock
fi