Saat bekerja pada solusi yang menggunakan penguncian file, saya percaya kode saya mengalami kebuntuan. Saya menggunakan systemd untuk memulai proses startup sistem. Menggunakan alarm (3) adalah sebuah pilihan, tetapi saya bertanya-tanya apakah ada cara bagi systemd untuk mendeteksi proses yang digantung dan memulai kembali?
Saat ini untuk menghindari masalah ini untuk saat ini, saya berencana untuk melihat output journalctl dan jika itu tidak berubah untuk waktu yang ditentukan, maka saya akan mematikan proses melalui skrip shell.
Hanya ingin tahu apakah ada cara yang lebih baik untuk memantau proses melalui systemd atau sebaliknya.
monitoring
systemd
pemikir bebas
sumber
sumber
for(;;) do_something();
?Jawaban:
Iya; tapi pertama-tama perbaiki program kereta Anda sebelum mengutak-atik systemd.
MariusMatutiae cukup benar. Anda memiliki masalah dengan program Anda. Itu jalan buntu. Mengotak-atik systemd bukanlah jawabannya. Paling-paling, itu gangguan. Perbaiki program Anda sehingga tidak rusak. Arahkan energi Anda pada hal yang benar.
Yang mengatakan, orang lain akan datang ke sini karena judul pertanyaan, bukan pertanyaan yang tepat. Demi keuntungan mereka, inilah jawaban untuk judul itu, mengabaikan pertanyaan yang pantas:
Ya, systemd dapat memonitor demon dan me-restart secara otomatis jika mereka berhenti berbicara. Bukan hanya sembarang demon tua. Seperti yang dicatat oleh mvp, tidak ada cara untuk mengetahui bahwa demon telah menggantung (di alam semesta ini, di mana masalah penghentian tidak dapat diputuskan, setidaknya). Baik systemd maupun program komputer lainnya tidak akan mampu menyimpulkan dari awal bahwa beberapa program acak yang dilemparkan pada mereka telah menemui jalan buntu, atau pergi ke loop tak terbatas, atau apa pun. Yang terbaik yang akan Anda dapatkan di sini adalah mendeteksi bahwa demon tidak melakukan operasi "detak jantung" secara teratur dalam rentang waktu yang diperlukan.
Karena itu, mengambil keuntungan dari kemampuan pengawas systemd, oleh karena itu, harus ditulis untuk berbicara protokol sistem-spesifik, protokol sd_notify. Ini menyulitkan kode demon sedikit. Ini lebih rumit karena demon harus, jika ditulis dengan benar, memeriksa apakah mereka telah dipanggil dengan fungsi pengawas diaktifkan, juga.
Sebuah demon yang berbicara protokol ini untuk memanfaatkan kemampuan pengawas systemd ...
WATCHDOG_USEC
variabel lingkungan;WATCHDOG=1
set opsi, pada interval sekitarWATCHDOG_USEC
/ 2 ("USEC" adalah singkatan dari microseconds);Type=notify
diatur dalam file unitnya;NotifyAccess=main
(atau=all
) mengatur file unitnya;WatchdogSec=
detik yang ditetapkan dalam file unitnya.libsystemd-daemon.so
Jika Anda ingin mengetahui detail pengkodean ini, setelah membaca manual, pastikan Anda membuka StackExchange yang tepat. Ini adalah SuperUser. StackOverflow ada di sana .
Bacaan lebih lanjut
sumber