Catatan: Pertanyaan yang dirumuskan secara singkat dapat ditemukan di bagian bawah.
Saya memiliki skrip yang membuat cadangan file saya ke drive USB eksternal. Menjalankannya bisa memakan waktu cukup lama, tergantung pada jumlah data baru yang saya buat. Saya ingin menjalankannya secara otomatis pada setiap shutdown sistem.
Saya menggunakan fedora 23 dengan pembaruan terbaru (systemd).
Saya mencoba mencapai ini dalam beberapa cara, tetapi saya tidak bisa membuatnya bekerja.
Proses berjalan lama dengan StopExec
layanan autobackup:
[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
Saya mengaktifkannya systemctl enable autobackup.service
dan memulainya dengan systemctl start autobackup.service
.
Bagian dari log boot saya ( 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.
Perhatikan bahwa saya tidak mempersingkat apa pun di antaranya, itu benar-benar tidak terpasang / mnt / CADANGAN tepat sebelum skrip dimulai, kebetulan lucu ..
Sebelum shutdown.target
layanan autobackup:
[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
Output pada dasarnya sama.
Masalah
Saya pikir masalahnya adalah bahwa systemd memulai skrip saya secara paralel dengan semua skrip shutdown lainnya dalam kedua kasus, yang meng-unmount CADANGAN dan menonaktifkan infrastruktur pipa (kesalahan lain yang kadang-kadang saya dapatkan, ketika unmount tidak cukup cepat).
Pertanyaan
Bagaimana saya bisa mengajarkan systemd untuk memulai skrip saya pertama pada shutdown, tunggu sampai keluar dan kemudian mulai sisa skrip shutdown / target / unit / apa pun?