我在我的根 crontab 中设置了一个脚本,该脚本应该使用以下命令重新启动我的机器reboot
命令。
但是,我得到了reboot: command not found
尽管事实上reboot
位于 root 用户的路径中。
$ sudo su
$ which reboot
/sbin/reboot
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin
我的脚本:
#!/bin/bash
ping 8.8.8.8 -c 1 > /dev/null 2>&1; exit_code=$?
time_stamp=$(date +"%Y%m%d-%H%M")
if [ $exit_code -ne 0 ]; then
(1>&2 echo "$time_stamp: failed with exit code $exit_code; restarting now")
reboot
else
echo "$time_stamp: ok"
fi
root 用户 crontab:
$ sudo crontab -l
58 * * * * /home/pi/github/ping-restart/ping-restart.sh >> /home/pi/github/ping-restart/cron.log 2>&1
$ sudo su
58 * * * * /home/pi/github/ping-restart/ping-restart.sh >> /home/pi/github/ping-restart/cron.log 2>&1
...是的,这只是一个临时的解决方法,同时我弄清楚为什么互联网不断下降。
cron 作业在非常基本的环境设置下运行;除此之外,默认的 PATH 只是/usr/bin:/bin
。确实如此not使用用户的常规 shell 设置。有几种方法可以解决这个问题:
- 在脚本中使用完整路径(即
/sbin/reboot
).
- 使用前在脚本中设置PATH
reboot
(i.e. PATH=/usr/bin:/bin:/usr/sbin:/sbin
).
- 在 crontab 中的脚本条目之前设置 PATH(语法与脚本中的相同)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)