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?
sumber
/lib/systemd/system-shutdown/
. Dan di samping itu, perlu diketahui bahwa skrip ini dieksekusi sangat terlambat dalam shutdown, setelah sistem file sudah di-mount read-only. Jadi setiap akses tulis ke sistem file akan gagal kecuali remounted sebagai baca-tulis (mount -oremount,rw /
). Lihat Bagaimana menjalankan skrip di / usr / lib / systemd / system-shutdown / saat reboot atau shutdown?Saya mendapatkannya!
Ambil solusi Proses berjalan lama dengan StopExec dan memodifikasinya seperti ini:
layanan autobackup:
Perhatikan baris:
Ini berfungsi seperti yang diharapkan dengan cara ini.
sumber
systemctl edit
.systemctl enable autobackup
memiliki efek yang sama dan lebih idiomatis, dan harus berfungsi karena Anda sudah memiliki[Install]
bagian di unit Anda. Anda harus memperbaiki kesalahan ketik itu di nama target. ;)