Ole*_*ers 4 linux bash shell cron raspberry-pi2
我有以下代码:(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
Run Code Online (Sandbox Code Playgroud)
当我手动运行此脚本时,输出如下:
19/01/2016 19:07:11
start
start recording
Run Code Online (Sandbox Code Playgroud)
如果通过(root)cronjob运行相同的脚本,则输出如下:
19/01/2016 19:07:01
start
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,文件"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
Run Code Online (Sandbox Code Playgroud)