Linux if语句在cron中不起作用
我有以下代码:(record.sh) 如果通过(根)cronjob运行相同的脚本,则输出如下:Linux if语句在cron中不起作用,linux,bash,shell,cron,raspberry-pi2,Linux,Bash,Shell,Cron,Raspberry Pi2,我有以下代码:(record.sh) 如果通过(根)cronjob运行相同的脚本,则输出如下: 19/01/2016 19:07:11 start start recording 19/01/2016 19:07:01 start 如您所见,文件“action.txt”的读取没有问题(“start”两次都被记录),因此这不应该是权限问题或错误路径问题。但是当作为cronjob运行时,不会调用if语句。没有显示“开始录制” 因此,我的问题是:为什么当我手动调用脚本时if语句可以工作,而当通过c
19/01/2016 19:07:11
start
start recording
19/01/2016 19:07:01
start
如您所见,文件“action.txt”的读取没有问题(“start”两次都被记录),因此这不应该是权限问题或错误路径问题。但是当作为cronjob运行时,不会调用if语句。没有显示“开始录制”
因此,我的问题是:为什么当我手动调用脚本时if语句可以工作,而当通过cron调用脚本时却不能工作?您的脚本是为bash编写的;这些错误几乎可以肯定地表明它是用
/bin/sh
运行的
要么添加一个适当的shebang并确保调用它的方式尊重它(/path/to/script
,而不是sh/path/to/script
),要么将其修复为兼容。例如:
case $action in
*start*)
echo "start recording"
./gone.sh
exit 1
;;
*stop*)
echo "stop recording"
./gone.sh
exit 1
;;
esac
您确定这两次都是用同一个shell执行的吗?显示脚本的第一行(带shebang),并将cron行添加到您的问题中。是的。当为bash编写脚本时,它看起来绝对像是一个用
/bin/sh
运行的脚本。@Cyrus第一行是“cd”。。。所以是的,您(所有人)的建议可能是对的:)顺便说一句,在处理cron作业时,最好同时检查stderr。在您的情况下,您应该已经收到一条发送给stderr的错误消息,该消息将指出问题所在。是的,这就是问题所在。。非常感谢。。!我们需要添加适当的shebang:)
case $action in
*start*)
echo "start recording"
./gone.sh
exit 1
;;
*stop*)
echo "stop recording"
./gone.sh
exit 1
;;
esac