网络和 DNS 启动并运行后,我尝试在 Debian 8 上启动 init.d 守护程序。这是我使用的脚本:
### BEGIN INIT INFO
# Provides: local_daemon
# Required-Start: $all $local_fs $remote_fs $network $named $time $syslog
# Required-Stop: $all $local_fs $remote_fs $network $named $time $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts a Daemon.
# Description: Starts a custom daemon.
### END INIT INFO
我有几个服务器,这基本上可以正常工作。但是,在某些情况下,调用脚本时 DNS 尚未准备好。因此,守护进程在运行时无法连接到 www.domain.com。最终 DNS 已准备就绪,但这是在脚本运行之后(而不是在脚本运行时)。
问题:如何在调用脚本时强制 DNS 准备就绪?我的假设是“Required-Start:”中的 $named 负责设置和准备 DNS。但事实似乎并非如此。如何强制仅在域名解析 (DNS) 和网络准备就绪时执行脚本?
编辑 2017-01-26:感谢您的反馈。这是一个实时服务器,我的 Linux 技能最多只能算是初级水平。否则,我宁愿不破坏运行良好的系统。无论如何,我在服务器启动前设置了 20 秒的休眠时间,这似乎运行良好。是的,我非常清楚这是“黑客行为”:
start() {
# wait a while to make sure the network is ready!
sleep 20
# run the server
...
}
case "$1" in
start)
# starts the server in a separate thread
start &
;;
stop)
# stop: we do nothing special
;;
*)
;;
esac
exit 0