Jawaban:
Ada OnFailure=
arahan dalam bagian [Unit]
, didokumentasikan dalam systemd.unit (5) . Ini didefinisikan sebagai berikut:
Daftar yang dipisahkan oleh spasi dari satu atau lebih unit yang diaktifkan ketika unit ini memasuki kondisi "gagal".
(Juga ada OnFailureJobMode=
arahan di bagian yang sama yang memungkinkan untuk mengatur mode pekerjaan untuk mengaktifkan OnFailure = unit.)
/etc/systemd/system
dan letakkan namanya dalam OnFailure=
arahan.
Anda juga dapat menggunakan ExecStopPost
untuk menjalankan perintah secara langsung alih-alih memulai sebuah unit.
Saya tidak senang dengan OnFailure
pengaturan sehingga saya terus mencari dan menemukan ExecStopPost
.
Contoh nyata berikut, jika tugas utama gagal maka systemd akan menjalankan git
perintah.
[Unit]
Description=SRI Dispenser Server
ConditionPathExists=|/usr/bin/
After=sri-boot-dsp.service
[Service]
WorkingDirectory=/usr/share/sri/configurations/transmitter
User=root
# This is task to run when this service starts
ExecStart=/usr/bin/python -m sri.DispenserServer
# If any of the ExecStart tasks fail, then ExecStopPost will run
ExecStopPost=/bin/git checkout -- .
Restart=always
RestartSec=10
KillSignal=SIGKILL
[Install]
WantedBy=multi-user.target
https://www.freedesktop.org/software/systemd/man/systemd.service.html
ExecStopPost = Perintah tambahan yang dijalankan setelah layanan dihentikan. Ini termasuk kasus-kasus di mana perintah yang dikonfigurasi dalam ExecStop = digunakan, di mana layanan tidak memiliki ExecStop = didefinisikan, atau di mana layanan keluar secara tidak terduga. Argumen ini mengambil beberapa baris perintah, mengikuti skema yang sama seperti yang dijelaskan untuk ExecStart =. Penggunaan pengaturan ini adalah opsional. Substitusi dan substitusi variabel lingkungan didukung. Perhatikan bahwa - tidak seperti ExecStop = - perintah yang ditentukan dengan pengaturan ini dipanggil ketika layanan gagal untuk memulai dengan benar dan dimatikan lagi.
Disarankan untuk menggunakan pengaturan ini untuk operasi pembersihan yang harus dijalankan bahkan ketika layanan gagal untuk memulai dengan benar. Perintah yang dikonfigurasikan dengan pengaturan ini harus dapat beroperasi walaupun layanan gagal memulai setengah jalan dan membiarkan data yang diinisialisasi tidak lengkap. Karena proses layanan sudah dihentikan ketika perintah yang ditentukan dengan pengaturan ini dijalankan, mereka tidak boleh mencoba untuk berkomunikasi dengan mereka.
Perhatikan bahwa semua perintah yang dikonfigurasi dengan pengaturan ini dipanggil dengan kode hasil layanan, serta kode keluar dan status proses utama, yang ditetapkan dalam variabel lingkungan $ SERVICE_RESULT, $ EXIT_CODE dan $ EXIT_STATUS, lihat systemd.exec (5) untuk detail.