我发现 systemd 非常令人兴奋,但我该如何使用它来编写脚本来挂载s3ql文件系统?例如,s3ql 开发人员提供了一个新贵配置就可以了。
具体来说,启动时必须运行 mount.s3ql(以所需用户身份运行,因为这是 FUSE 文件系统),关机时必须运行 umount.s3ql。此外,如果我们想在挂载之前 fsck.s3ql 文件系统,或者在启动后和关机前运行 Unison 同步步骤(我在自己的 upstart 上进行了所有修改),该怎么办?
乍一看,我会认为我想安装一个支架单元在 systemd 上,但看起来该服务单元实际上更适合执行前和执行后的启动命令。(所有手册页均可用这里。
我依赖什么 .target 来编码对网络连接的依赖关系?
答案1
乍一看,对于mount.s3ql
和umount.s3ql
,通用.mount
单位似乎比较合适。命令mount
和systemd挂载时支持助手。但是,助手必须支持传递选项的标准方法,即mount.fstype
-o options
s3ql不会。此外,同样的限制也适用与 /etc/fstab 一样。
.service
因此,使用一个调用所需命令的单元实际上可能会更好:
[单元] [电子邮件保护] [电子邮件保护] [服务] 类型=分叉 环境=AUTHFILE=/path/to/authinfo2 ExecStart=/usr/sbin/mount.s3ql --authfile ${AUTHFILE} ${BUCKET} ${MOUNTPOINT} ExecStop=/usr/sbin/umount.s3ql ${MOUNTPOINT} 超时时间=5分钟
由于没有标准的网络配置方法,更不用说实际检查连接是否正常工作的方法,因此没有标准systemd目标就是您想要的。虽然有network.target
,但是当连接尚未可用时,它可能认为自己已启动。
如果您正在使用 NetworkManager,那么您的发行版可能已经包含一个运行的单元nm-online
– 例如,Arch 称之为NetworkManager-wait-online.service
。
[单元] 需要=NetworkManager-wait-online.service 之后=NetworkManager-wait-online.service