我有一个用 Python 编写的服务(监听 0.0.0.0:8080 的小型 http 服务),在系统启动时启动。问题是,有时在服务器启动时它启动得太早,此时内核甚至还没有初始化 IPv4(?)。服务失败并显示错误(来自 /var/log/upstart):
socket.gaierror:[Errno -9] 不支持主机名的地址系列
稍后手动启动时,它会正常启动。在预启动部分添加“sleep 30”也有帮助。但我想知道是否有更好、更简洁的方法在 upstart 配置中指定此服务需要有效的 ipv4。它不需要完整的“路由”或默认网关,甚至不需要配置的环回。它所需要的只是绑定到“任何”(0.0.0.0)IPv4 地址的能力。
答案1
start on (started networking)
您可以配置您的作业以在事件触发时启动 。
开始 当作业正在运行时,Upstart 会发出此事件。请注意,作业不必具有关联的程序或脚本,因此“正在运行”并不一定意味着正在执行任何其他进程。