这是我/etc/rc.local
目前的情况:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/path/to/script.sh &
exit 0
就是这样了。
问题是,script.sh
根据日志文件,它在启动时运行了两次。第一次运行按预期进行,但第二次运行会发出一堆错误消息,因为某些事情已经开始了,等等。如果我手动运行脚本,它只会运行一次,所以我确信它不是内部循环。
如果我改成/etc/rc.local
这样:
date >> /path/to/Debug.txt
runlevel >> /path/to/Debug.txt
#/path/to/script.sh &
Debug.txt
然后我在一次重启后得到了这个:
Fri Jan 6 15:56:42 CST 2017
N 2
Fri Jan 6 15:58:38 CST 2017
N 2
答案1
最好的解决方案是找出脚本被调用两次的原因。是 rc.local 被调用两次,还是您的脚本从另一个位置启动?您可以尝试向 rc.local 添加一些日志,看看它是否确实是被调用两次的。例如,
date >/var/tmp/rc.local.log
/path/to/script.sh &
exit 0
如果您无法找出脚本启动两次的原因,另一个选择是为脚本创建一个锁定文件。这应该进入 tmpfs 文件系统,以便在重新启动时消失。在脚本顶部添加类似这样的内容。
test -f /var/run/script.sh.pid && exit 0
echo $$ >/var/run/script.sh.pid
这样,如果/var/run/script.sh.pid
存在,脚本就会退出。否则,它会创建它并继续运行它。此解决方案可能会引发竞争,但可能足以解决您的问题。