如何检查由羊群执行的命令的退出代码?
-
21-09-2019 - |
题
问候所有。我设立一个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
的,所以我不知道,如果它成功,或不执行的方式。
解决方案
它看起来像可以使用flock
,flock <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
不隶属于 StackOverflow