Apa yang perlu saya letakkan di [install]
bagian ini, sehingga systemd berjalan /home/me/so.pl
tepat sebelum shutdown dan juga sebelum /proc/self/net/dev
dihancurkan?
[Unit]
Description=Log Traffic
[Service]
ExecStart=/home/me/so.pl
[Install]
?
Solusi yang disarankan adalah menjalankan unit layanan sebagai layanan normal - lihat [Install]
bagian tersebut. Jadi semuanya harus dipikirkan terbalik, ketergantungan juga. Karena urutan shutdown adalah urutan startup terbalik. Itu sebabnya skrip harus ditempatkan ExecStop=
.
Solusi berikut ini berfungsi untuk saya:
[Unit]
Description=...
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=<your script/program>
[Install]
WantedBy=multi-user.target
RemainAfterExit=true
diperlukan saat Anda tidak memiliki ExecStart
tindakan.
Setelah membuat file, pastikan untuk systemctl daemon-reload
dan systemctl enable yourservice --now
.
Saya baru saja mendapatkannya dari systemd IRC, kredit akan ke mezcalero.
ExecStart=/bin/true
.RemainAfterExit=true
diperlukan ketika tidak adaExecStart
adalah karenasystemd
tidak akan mencoba untuk menjalankanExecStop
jika berpikir bahwa layanan tidak berjalan.RemainAfterExit=true
menyebabkansystemd
untuk percaya bahwa layanan sedang berjalan, sehingga menyebabkan ia berjalanExecStop
di shutdown.Note that it is usually not sufficient to specify a command for this setting that only asks the service to terminate (for example, by queuing some form of termination signal for it), but does not wait for it to do so.
Sejauh yang saya bisa melihat ini melakukan apa yang saya butuhkan (tapi saya tidak tahu persis mengapa).
sumber
kexec.target
bit SebelumWantedBy=shutdown.target reboot.target halt.target
ke[Unit]
bagian.Before=
&After=
jangan ubah dependensi.Untuk menjalankan layanan tepat sebelum memulai layanan reboot / shutdown / halt / kexec (yaitu pada saat-saat terakhir sebelum root filesystem menjadi remount hanya-baca) gunakan konfigurasi layanan ini:
Aktifkan dengan:
Untuk menjalankan skrip tepat sebelum reboot / shutdown / halt / kexec yang sebenarnya (ketika Anda tidak dapat menulis ke sistem file root, karena itu di-remount hanya-baca) tambahkan skrip ini dapat dieksekusi ke
/usr/lib/systemd/system-shutdown
direktori.Lihat juga:
https://www.freedesktop.org/software/systemd/man/bootup.html
https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html
sumber
final.target
. Idealnya saya ingin itu adalah hal pertama yang dieksekusi setelah pengguna melakukannya$ sudo reboot
.Saya tidak sepenuhnya yakin tetapi saya tidak berpikir Anda perlu menginstal bagian meskipun saya menambahkannya secara eksplisit. Saya juga tidak mengujinya tetapi saya pikir ini akan membantu Anda memulai:
sumber