Cron 作业结果与从自己的 shell 执行不同

Cron 作业结果与从自己的 shell 执行不同

我使用的是 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

相关内容