【发布时间】:2016-04-25 08:31:54
【问题描述】:
我有以下代码:(record.sh)
cd $(dirname $0)
dt=$(date '+%d/%m/%Y %H:%M:%S');
echo $dt;
read action < /home/nfs/sauger/web/pi/action.txt
echo $action;
if [[ $action == *"start"* ]]
then
echo "start recording"
./gone.sh
exit 1
elif [[ $action == *"stop"* ]]
then
echo "stop recording"
./gone.sh
exit 1
else
#More stuff done here
fi
当我手动运行此脚本时,输出如下:
19/01/2016 19:07:11
start
start recording
如果通过(根)cronjob 运行相同的脚本,则输出如下:
19/01/2016 19:07:01
start
如您所见,“action.txt”文件已顺利读取(两次都记录了“start”),因此这不应该是权限问题或路径错误。但是当作为 cronjob 运行时,不会调用 if 语句。没有出现“开始录制”。
所以我的问题是:为什么当我手动调用脚本时 if 语句有效,但通过 cron 完成时却无效?
【问题讨论】:
-
你确定两次都是用同一个shell执行的吗?
-
显示脚本的第一行(带有 shebang)并将您的 cron 行添加到您的问题中。
-
是的。当它是为 bash 编写时,这绝对看起来像一个使用
/bin/sh运行的脚本。 -
@Cyrus 第一行是“cd”...所以。是的,你(所有人)的建议可能是对的 :)
-
顺便说一句,在使用 cron 作业时,最好同时检查 stderr。在你的情况下,你应该已经收到了一条错误消息到 stderr,它会查明问题。
标签: linux bash shell cron raspberry-pi2