如何在启动时启动一个永不结束的脚本

如何在启动时启动一个永不结束的脚本

我试图在没有 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

相关内容