Примітка: стисло сформульоване запитання можна знайти внизу.
У мене є сценарій, який робить резервну копію моїх файлів на зовнішньому накопичувачі 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 безпосередньо перед запуском сценарію, смішний збіг.
Перед shutdown.target
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 спершу запускати сценарій після вимкнення, дочекатися його завершення, а потім запустити решта скриптів / цілей / одиниць відключення / що завгодно?