我正在 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
通知用户发生这种情况的通知。