![在 systemd 中运行服务之前先卸载](https://linux22.com/image/1201594/%E5%9C%A8%20systemd%20%E4%B8%AD%E8%BF%90%E8%A1%8C%E6%9C%8D%E5%8A%A1%E4%B9%8B%E5%89%8D%E5%85%88%E5%8D%B8%E8%BD%BD.png)
我有一个 systemd 单元服务脚本,它启动 borgmatic 来执行备份过程。我想卸载 borgmatic 的潜在虚拟挂载档案,以避免错误。
我添加了一行
ExecStartPre=/usr/bin/umount /mnt/backup || true
到这个 borgmatic.service 单元脚本
[Unit]
Description=borgmatic backup
Wants=network-online.target
After=network-online.target
ConditionACPower=true
[Service]
Type=oneshot
LockPersonality=true
MemoryDenyWriteExecute=no
NoNewPrivileges=yes
PrivateDevices=yes
PrivateTmp=yes
ProtectClock=yes
ProtectControlGroups=yes
ProtectHostname=yes
ProtectKernelLogs=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK
RestrictNamespaces=yes
RestrictRealtime=yes
RestrictSUIDSGID=yes
SystemCallArchitectures=native
SystemCallFilter=@system-service
SystemCallErrorNumber=EPERM
ProtectSystem=full
ReadWritePaths=/backup
#CapabilityBoundingSet=CAP_DAC_READ_SEARCH CAP_NET_RAW
Nice=19
CPUSchedulingPolicy=batch
IOSchedulingClass=best-effort
IOSchedulingPriority=7
IOWeight=100
Restart=no
LogRateLimitIntervalSec=0
ExecStartPre=sleep 1m
ExecStartPre=sudo /usr/bin/umount /mnt/backup || true
ExecStart=systemd-inhibit --who="borgmatic" --why="Prevent interrupting scheduled backup" borgmatic --syslog-verbosity 1
但是,当计时器启动时,我收到错误,提示应代表sudo
用户运行 umount。我已将其添加sudo
到命令中,因此现在:
ExecStartPre=sudo /usr/bin/umount /mnt/backup || sudo true
这并没有多大帮助:
Apr 27 06:07:01 myhostnamt.tld sudo[617036]: root : PWD=/ ; USER=root ; COMMAND=/usr/bin/umount /mnt/backup || sudo true
Apr 27 06:07:01 myhostnamt.tld sudo[617036]: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=0)
Apr 27 06:07:01 myhostnamt.tld sudo[617039]: umount: /mnt/backup: must be superuser to unmount.
Apr 27 06:07:01 myhostnamt.tld sudo[617039]: umount: ||: must be superuser to unmount.
Apr 27 06:07:01 myhostnamt.tld sudo[617039]: umount: sudo: must be superuser to unmount.
Apr 27 06:07:01 myhostnamt.tld sudo[617039]: umount: true: must be superuser to unmount.
可能出了什么问题?