【发布时间】:2017-11-27 15:13:54
【问题描述】:
我在我的根 crontab 中设置了一个脚本,它应该使用 reboot 命令重新启动我的机器。
但是,尽管reboot 在 root 用户的路径中,但我得到了一个 reboot: command not found。
$ 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
...是的,这只是一个临时解决方法,而我正在弄清楚为什么互联网不断下降。
【问题讨论】:
-
也许尝试使用绝对路径
/sbin/reboot... -
@l'L'l 这似乎有效。 crontab 中带有
which reboot的脚本没有输出(表示未找到),而which /sbin/reboot有输出/sbin/reboot,正如预期的那样。知道为什么reboot本身不起作用吗? -
因为
cron不知道reboot 命令在哪里,所以你必须给出位置。在cron中,仅使用名称就可以调用某些命令,因此您通常需要为其提供绝对路径。 -
@l'L'l:我不确定我是否理解。我可以在 root 用户 crontab 中使用其他脚本,这些脚本具有按名称而不是完整路径调用的命令(
date如/bin/date、basename如/usr/bin/basename、traceroute如/usr/sbin/traceroute)。reboot有什么特别之处? -
见戈登的回答...
标签: linux bash path cron reboot