le_*_*_me 21 linux shutdown administrator systemd
注意:可以在底部找到简要制定的问题。
我有一个脚本可以将我的文件备份到外部 USB 驱动器上。执行它可能需要一段时间,具体取决于我创建的新数据量。我想在系统每次关闭时自动运行它。
我正在使用带有最新更新 (systemd) 的 Fedora 23。
我试图通过多种方式实现这一目标,但我无法让它发挥作用。
自动备份服务:
[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
Run Code Online (Sandbox Code Playgroud)
我用 激活它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.
Run Code Online (Sandbox Code Playgroud)
请注意,我没有缩短中间的任何内容,它确实在脚本开始之前卸载了 /mnt/BACKUP,有趣的巧合..
自动备份服务:
[Unit]
Description=Slow backup script
DefaultDependencies=no
Before=shutdown.target
[Service]
ExecStart=/etc/systemd/system/do_backup.sh
Type=oneshot
Run Code Online (Sandbox Code Playgroud)
systemctl edit shutdown.target
[Unit]
Requires=autobackup.service
Run Code Online (Sandbox Code Playgroud)
输出基本相同。
我认为问题在于 systemd 在这两种情况下都与所有其他关闭脚本并行启动我的脚本,这会卸载 BACKUP 并停用管道基础设施(当卸载速度不够快时,我有时会遇到另一个错误)。
我怎样才能教 systemd 在关机时首先启动我的脚本,等到它退出,然后再启动其余的关机脚本/目标/单元/什么的?
小智 13
无需创建或编辑服务文件。只需将您的脚本放入
/usr/lib/systemd/system-shutdown/
Run Code Online (Sandbox Code Playgroud)
https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html
在执行实际系统halt/poweroff/reboot/kexec systemd-shutdown 之前,将运行/usr/lib/systemd/system-shutdown/ 中的所有可执行文件,并向它们传递一个参数:“halt”、“poweroff”、“reboot” " 或 "kexec",取决于选择的操作。此目录中的所有可执行文件都是并行执行的,并且在所有可执行文件完成之前不会继续执行操作。
我用它来简单地使 PC 扬声器发出哔哔声。
le_*_*_me 12
我知道了!
使用 StopExec解决长期运行的进程并像这样修改它:
自动备份服务:
[Unit]
Description=Slow backup script
RequiresMountsFor=/mnt/BACKUP /home
[Service]
ExecStop=/etc/systemd/system/do_backup.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
注意这一行:
RequiresMountsFor=/mnt/BACKUP /home
Run Code Online (Sandbox Code Playgroud)
它以这种方式按预期工作。
| 归档时间: |
|
| 查看次数: |
29647 次 |
| 最近记录: |