注意:简短说明的问题可以在底部找到。
我有一个脚本,可将文件备份到外部USB驱动器上。执行该过程可能需要一段时间,具体取决于我创建的新数据量。我想在系统每次关闭时自动运行它。
我正在使用最新更新的Fedora 23(systemd)。
我试图通过多种方式实现这一目标,但是我无法使其正常工作。
StopExec的长期运行过程
autobackup.service:
[Unit]
Description=Slow backup script
Requires=local-fs.target
[Service]
ExecStart=/bin/true
ExecStop=/etc/systemd/system/do_backup.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multiuser.target
我使用激活了它,systemctl enable autobackup.service
然后从开始了systemctl start autobackup.service
。
我的启动日志(journalctl -b-1
)的一部分:
Dez 22 17:45:27 localhost systemd[1]: Unmounted /mnt/BACKUP.
Dez 22 17:45:27 localhost do_backup.sh[4296]: At subvol /home/BACKUP.2015_12_22-17_45_25
Dez 22 17:45:27 localhost do_backup.sh[4296]: ERROR: parent subvol is not reachable from inside the root subvol.
Dez 22 17:45:27 localhost do_backup.sh[4296]: At snapshot BACKUP.2015_12_22-17_45_25
Dez 22 17:45:27 localhost do_backup.sh[4296]: ERROR: failed to dump stream. Broken pipe
Dez 22 17:45:27 localhost systemd[1]: autobackup.service: Control process exited, code=exited status=1
Dez 22 17:45:27 localhost systemd[1]: Stopped Slow backup script.
Dez 22 17:45:27 localhost systemd[1]: autobackup.service: Unit entered failed state.
请注意,我没有缩短这两者之间的任何时间,它确实在脚本开始之前就卸载了/ mnt / BACKUP,这很有趣。
关闭之前
autobackup.service:
[Unit]
Description=Slow backup script
DefaultDependencies=no
Before=shutdown.target
[Service]
ExecStart=/etc/systemd/system/do_backup.sh
Type=oneshot
systemctl edit shutdown.target
[Unit]
Requires=autobackup.service
输出基本相同。
问题
我认为问题在于,在两种情况下,systemd都会与所有其他关闭脚本并行地启动我的脚本,这将卸载BACKUP并停用管道基础结构(当卸载速度不够快时,我有时会收到另一个错误)。
问题
我该如何教导systemd在关闭时首先启动我的脚本,等到它退出后再启动其余的关闭脚本/目标/单元/任何东西?