我正在编写一个systemd
.service
应该开始的脚本后/etc/fstab
CIFS 网络位置通过/mnt/
启动时安装。
该脚本等待 OpenVPN 依赖脚本首先启动,但我也希望它等待安装完成。
/etc/systemd/system/my-daemon.service:
[Unit]
Description=Launch My Daemon
After=network.target vpn-launch.service
Requires=vpn-launch.service
我尝试添加systemd.mount
到行:After=network.target vpn-launch.service systemd.mount
,但它没有给出我希望的结果。
答案1
/etc/fstab
CIFS 网络位置通过/mnt/
启动时安装。
不它不是。把这件事做好,剩下的就自然而然了。
挂载由(生成的)systemd 处理安装单元它将被命名为类似mnt-wibble.mount
.您可以在以下命令的输出中看到它的实际名称:
systemctl list-units --type=mount
您可以像任何其他单元一样详细查看它:
systemctl status
非常简单:您必须命令在安装单元启动后启动您的单元。
After=network.target vpn-launch.service mnt-wibble.mount
进一步阅读
答案2
尽管两个答案都是正确的,但我想在讨论中添加我的两分钱,因为当我寻找它时,我缺少一些如何继续的说明和示例。
- 将文件系统添加到
/etc/fstab
mount -a
挂载 fstab 中提到的所有文件系统的类型- 查找已生成的 systemd 单元:(
systemctl list-units | grep '/path/to/mount' | awk '{ print $1 }'
应返回以 结尾的内容.mount
) - 将找到的mount-unit添加到文件
After=
中的语句中*.service
以下是在启动时启动服务的示例my-daemon
,但在网络准备就绪后,将在 处挂载 CIFS 共享/mnt/cifs
,并且vpn-launch
服务已启动:
/etc/fstab
//servername/sharename /mnt/cifs cifs defaults,some,other,options 0 0
注意:您可能需要添加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
不要忘记启用该服务,以便它在启动时启动:systemctl enable my-daemon
请注意,这也适用于其他文件系统(NFS、HDD 等)。
正如已经提到的,这两个答案都是正确的,我鼓励每个人都阅读它们,但对我来说,几个例子可以节省我一些时间。
更新(2019-06-25):
- 添加了有关 fstab 选项的注释,以防止使用外部驱动器时启动锁定
- 添加
mnt-cifs.mount
到Requires=
导致my-daemon.service
cifs挂载未成功挂载时无法启动的列表
答案3
抱歉,我还不能发表评论。
就像 JdeBP 所说,您应该在文件系统挂载上进行排序。您可以预测安装单元的名称,或者您可以使用(在单元部分):
RequiresMountsFor=/绝对/路径/of/安装
此选项创建对适当 *.mount 单元的依赖关系,以使路径在启动服务之前可访问。它可能不适用于所有 systemd 版本,但在过去 6 个月左右的时间里我一直在 CentOS 7 机器上使用它。
答案4
@bm-bergmotte:感谢您的指导,对我帮助很大。对我来说,它只是工作,如果我把
After=network.target vpn-launch.service mnt-cifs.mount
Requires=vpn-launch.service mnt-cifs.mount
如果我没有将“mnt-cifs.mount”放在“Requires”中(并按此顺序),它可以重新启动/启动,但如果设备未安装,服务仍然会启动。如果未安装设备,则将其另外放入“需要”后,服务会在启动之前安装设备。