我试图在没有 GUI 的无头 ubuntu 12.04 服务器启动时自动运行一个永不结束的脚本(这样它在退出时不会返回 0)。
我努力了@reboot nohup /home/luke/netup.sh &在 crontab 中,脚本虽然似乎可以运行,但无法正常工作。我试过更新-rc.d netup.sh 默认值,脚本已启动但仍然无法正常运行,并且大多数应该自动启动的其他程序都没有启动。
该脚本尝试监控和记录互联网中断,并包含一个 while-do 循环。它在登录服务器并手动启动时起作用。
以下是脚本
#!/bin/bash
#
# Script to monitor internet up time
echo "Server started" `date "+%F %T"` >> /home/luke/netup.log
START=0
while [ 1 ] ; do # continuous loop
#------------------------------------------------------------------------
/bin/ping -q 8.8.8.8 -c1 1>/dev/null 2>/dev/null # ping test
PING=$?
#------------------------------------------------------------------------
if [ $PING = 0 ]; then # ping success
if [ $START -ne 0 ]; then # was down
END=$(date +%s)
TIME=$(($END - $START))
START=0
let TIME=($TIME/60) #convert seconds to minutes
echo "Failed" $FAIL_TIME "for" $TIME "minutes" >> /home/luke/netup.log
fi
else # ping failure
if [ $START -eq 0 ]; then # was up
START=$(date +%s)
FAIL_TIME=$(date "+%F %T")
fi
fi
#------------------------------------------------------------------------
if [ $PING = 0 ]; then # wait
sleep 60
else
sleep 10
fi
done
答案1
与其设置一个在启动时不断运行的脚本,为什么不将其改为使用 cron 运行呢?既然你无论如何都要让它在两次运行之间休眠 60 秒,那么使用 cron 每分钟运行一次没有 while 循环的脚本会更有意义,也更易于管理。
您可能还对 serverfault 上这个问题的答案感兴趣:
https://serverfault.com/questions/49082/can-i-run-a-cron-job-more-frequently-than-every-minute