我读了这个有趣的问题,基本上说我应该始终避免达到不是子过程的过程。这是很好的解释,并且完全有道理。
但是,当OP试图做Cron并不是要做的事情时,我处于截然不同的情况:
- 我想每5分钟说一次,但是一百次运行需要超过5分钟(我不能一次运行两个实例)。
- 我不想杀死或操纵其他过程,如果该过程的另一个实例正在运行,我只想结束我的过程。
在这种情况下,获取"非孩子过程"的PID可以吗?如果是这样,我该怎么办?
我已经尝试做if pgrep "myscript"; then ...
或类似的事情,但是该过程找到了自己的pid。我需要检测到它是否找到一个以上。
(最初是在重定向之前,我读了此问题,但是给出的解决方案无效:它可以使用它给出该过程的PID)
编辑:我以前应该提到它,但是如果脚本已经在使用,我仍然需要在日志文件中写入某些内容,至少: date>>script.log; echo "Script already in use">>script.log"
,我可能错了,但我认为羊群不允许这样做。
使用 lckdo
或 flock
避免重复运行。
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.
当然,您可以自己实现此原始的Lockfile功能。
if [ ! -f /tmp/my.lock ];then
touch /tmp/my.lock
run prog
rm -f /tmp/my.lock
fi