问候所有。我设立一个cron作业执行bash脚本,而且我担心下一个会前一个结束之前开始。一个小Googling揭示了解决这一一种流行的方式是flock命令,以下列方式使用:

flock -n lockfile myscript.sh
if [ $? -eq 1 ]; then
    echo "Previous script is still running!  Can't execute!"
fi

这伟大工程。但是,我该怎么办,如果我要检查myscript.sh的退出代码?它返回无论退出代码将被覆盖由flock的,所以我不知道,如果它成功,或不执行的方式。

有帮助吗?

解决方案

它看起来像可以使用flockflock <fd>,其中<fd>是一个文件描述符的替换形式。如果你把这个变成一个子shell,以及文件描述符重定向到您的锁文件,然后涌向将等待,直到它可以写入该文件(或错误,如果它不能立即打开它,你已经通过-n)。然后你可以在你的子shell中的一切,包括测试运行脚本的返回值:

(
  if flock -n 200
  then
    myscript.sh
    echo $?
  fi
) 200>lockfile

其他提示

#!/bin/bash

if ! pgrep myscript.sh; then
  flock -n lockfile myscript.sh
fi

如果我理解你的权利,你要确保“myscript.sh”的cron尝试之前没有运行,再次运行命令。假设是正确的,我们检查,看看是否p纤ep未能找到在进程列表,如果myscript.sh所以我们再次运行羊群命令。

也许这样的事情会为你工作。

#!/bin/bash
RETVAL=0
lockfailed()
{
        echo "cannot flock"
        exit 1
}
(
        flock -w 2 42 || lockfailed
        false
        RETVAL=$?
        echo "original retval $RETVAL"
        exit $RETVAL
) 42>|/tmp/flocker
RETVAL=$?
echo "returned $RETVAL"
exit $RETVAL
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top