退出启动时的无限重启循环(rc.local)

退出启动时的无限重启循环(rc.local)

我正在 Debian Squeeze 中创建一个启动脚本(从 rc.local 调用)。启动脚本从文件中检查变量值,递减变量并将其写回文件,然后如果变量大于 0,则执行测试并重新启动系统。如果该变量为 0 或小于 0,则不会重新启动系统。我的问题如下:假设我在几次测试后意识到测试中存在错误。有什么办法可以打破执行测试->重启->重复我已经设置的循环。放一个“睡1000”在测试或做ps aux|grep可能有用,但我不确定在 rc.local 脚本运行之前是否可以访问它们。如果我在后台而不是前台运行脚本会怎样?在这种情况下,当测试在后台运行时,我是否可以访问 bash 登录 shell 等?

 COUNT=`cat $testFile|wc -l`
 if [ $COUNT -gt 0 ];then
                ARGS=`head -1 $testFile`
                cd /testCode
                /testCode/startTest.sh $ARGS
                sed -i '1d' $testFile
                echo "rebooting"
                /sbin/reboot &
                exit 0
            fi

我知道我提供的细节很少,因为我不确定需要什么信息。我将根据需要更新问题。

更新:我进行了测试。在测试完成之前我收到登录提示。我虽然只有在 rc.local 执行完成后才会收到登录提示。有人可以阐明这一点吗?

答案1

只需将 /sbin/reboot 替换为有条件重新启动

[ -r /noreboot ] || /sbin/reboot 

然后,如果您不想重新启动,只需触摸 /noreboot 就可以了,无论脚本当时在做什么,只要它尚未重新启动即可。

您还可以使用 livecd 启动系统,并在发现错误时注释掉 rc.local 中的重新启动行。

答案2

/etc/rc.local在执行完成之前,您不会收到登录提示。

如果您想在测试执行时允许登录,请将文本放入带有@reboot日期字段的 crontab 中,或在后台运行测试/etc/rc.local。请注意,如果计算机在某人登录后几分钟突然重新启动,您可能会感到惊讶。您最好有一个/etc/motd通知用户发生这种情况的通知。

相关内容