我工作的一个systemd .service是应该启动脚本后CIFS网络位置通过安装/etc/fstab于/mnt/在启动时。
该脚本首先等待 OpenVPN 依赖脚本启动,但我也希望它等待挂载完成。
/etc/systemd/system/my-daemon.service:
[Unit]
Description=Launch My Daemon
After=network.target vpn-launch.service
Requires=vpn-launch.service
Run Code Online (Sandbox Code Playgroud)
我试图添加systemd.mount到行:After=network.target vpn-launch.service systemd.mount,但它没有给出我希望的结果。
Jde*_*eBP 98
CIFS网络位置经由安装
/etc/fstab于/mnt/在启动时。
不它不是。做对了,其余的自然而然地就位。
挂载由(生成的)systemd挂载单元处理,该单元将命名为mnt-wibble.mount. 您可以在systemctl list-units --type=mount命令的输出中看到它的实际名称。您可以像使用systemctl status.
那么很简单:您必须在安装单元启动后订购您的单元。
After=network.target vpn-launch.service mnt-wibble.mount
bm-*_*tte 26
虽然这两个答案都是正确的,但我想在讨论中加上我的两分钱,因为当我寻找它时,我遗漏了一些如何进行的说明和示例。
/etc/fstabmount -a挂载 fstab 中提到的所有文件系统的类型systemctl list-units | grep '/path/to/mount' | awk '{ print $1 }'.mount)After=语句中*.service以下是my-daemon在启动时启动服务的示例,但在网络准备就绪后,CIFS 共享安装在/mnt/cifs,并且vpn-launch服务已启动:
/etc/fstab
//servername/sharename /mnt/cifs cifs defaults,some,other,options 0 0
Run Code Online (Sandbox Code Playgroud)
注意:您可能想要添加nofail到您的 fstab 选项(例如,当使用外部驱动器时)。否则,如果设备未连接,您的机器将无法启动。参见ArchWiki 的 fstab 文章
/etc/systemd/system/my-daemon.service
[Unit]
Description=Launch My Daemon
Requires=vpn-launch.service mnt-cifs.mount
After=network.target vpn-launch.service mnt-cifs.mount
[Service]
ExecStart=/path/to/my-daemon
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
不要忘记启用该服务,使其在启动时启动: systemctl enable my-daemon
请注意,这也适用于其他文件系统(NFS、HDD 等)。
如前所述,两个答案都是正确的,我鼓励每个人都阅读它们,但对我来说,举几个例子可以节省我一些时间。
更新(2019-06-25):
mnt-cifs.mount到Requires=列表中导致my-daemon.servicecifs挂载未成功导致无法启动小智 22
抱歉,我还不能发表评论。
就像 JdeBP 所说的,你应该在文件系统挂载上进行排序。您可以预测安装单元的名称,或者,您可以使用(在单元部分):
RequiresMountsFor=/absolute/path/of/mount
此选项创建对适当 *.mount 单元的依赖关系,以便在启动服务之前使路径可访问。它可能不是在所有 systemd 版本上都有,但我在过去 6 个月左右的时间里一直在 CentOS 7 机器上使用它。
| 归档时间: |
|
| 查看次数: |
88814 次 |
| 最近记录: |