
我有一个刚刚创建的脚本,它在 root 下运行良好。我添加了一个 cron 作业,但它运行不正常
命令是:
gpio -g mode 17 input
getval="$(gpio read 17)"
todayis=$(date)
getstatus=$getval
if [ "$getstatus" = "0" ]; then
power="Power ON"
else
power="Power OFF"
echo $todayis $power $getstatus >> /var/www/turnmeon.log
以 root 身份运行时的日志文件:
Wed Nov 8 21:11:41 UTC 2017 Power ON 0
作为 crontab 运行时的日志文件:
Wed Nov 8 21:11:41 UTC 2017 Power OFF
如果 OFF 确实为 true,那么末尾不会有 1,就像我所期望的那样。
为什么它会在 bash 提示符下运行而不是作为 crontab 作业运行
*/2 * * * * bash /myscript.sh
答案1
听起来这是一个权限问题。您可能正在以桌面用户身份编辑 crontab,这意味着任务将在桌面用户下运行。如果任务需要 root,则需要以 root 身份编辑 crontab
答案2
可能的原因是cron 中gpio
没有PATH
可用的内容。指定gpio命令的完整路径,例如
getval="$(/sbin/gpio read 17)"
使用 找出它在您系统上的位置which gpio
。
我之前就被这个困扰了,因为我经常修改嵌入式解决方案。如果脚本更复杂,我通常会在开头附近初始化 PATH 和 LD_LIBRARY_PATH 以使事情变得更容易。