我在 Fedora 18 上有一个 SysV 初始化脚本。Fedora 18 使用 systemd(显然,没有办法切换回 SysV)。
我的脚本需要网络准备好。目前,在脚本运行时,网络还没有准备好。如何确保我的 SysV 初始化脚本在网络启动后运行?
我的脚本的开头如下所示:
#!/bin/bash
#
# chkconfig: 345 99 01
# description: starts the xyz boot service
好的,在尝试了几件事之后,我尝试添加一个 LSB 标头:
### BEGIN INIT INFO
# Required-Start: $network $local_fs $named
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: Starts/stops the foo service
# Description: Starts/stops the foo service
### END INIT INFO
这行得通!该脚本现在在网络初始化后运行。我猜这个systemd
实现会读取 LSB 标头。
要在网络准备就绪时运行脚本,请在 systemd 服务文件的 [Unit] 部分中添加以下内容:
After=network-online.target
Wants=network-online.target
当网络管理软件认为网络已启动时,网络被定义为就绪(这通常意味着 IP 地址已配置且可路由)。对于 NetWorkManager,它会查询 dbus 以获取信息。
参考