我使用的是 Ubuntu 12.0.4 我有一个脚本,基本上包含以下代码:
lockfile=/var/tmp/mylock
if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null; then
exit_normally "instance is running"
else
echo "no instance is running"
fi
文件 /var/tmp/mylock 在我的系统中不存在,因此当我手动执行脚本时,我得到“没有实例正在运行”,这是正确的。
但是当shell脚本被cron执行时,总是返回“instance is running”
我不确定在哪里检查或寻找什么来找到上述问题的根本原因,希望我能在这里得到一些指示。
答案1
作为一般做法,创建一个文件并期望操作系统不会破坏它(如果存在)并不是测试它是否存在的好方法。
您会得到更好的服务:
if [ -f $lockfile ]; then
exit_normally "instance is running"
else
echo "no instance is running"
fi
但是,如果您尝试使用文件的存在作为锁定文件,那么最好使用 unix lockfile 命令:
lockfile -r 0 $lockfile
if [ $? -ne 0 ]; then
exit_normally "instance is running"
else
echo "no instance is running"
fi