Saya ingin memiliki skrip "stop" khusus runit
( runsv
) untuk dijalankan ketika harus menghentikan / memulai ulang proses. Saat ini hanya membunuh proses, lalu menjalankan skrip "selesai". Tetapi dalam kasus saya, proses saya memunculkan proses anak secara dinamis, jadi alih-alih sederhana kill
, saya perlu "killtree"
menyingkirkannya. Bagaimana aku melakukan itu?
Saya tahu itu harus dilakukan melalui control
opsi runit tetapi dari membaca dokumen itu tidak begitu jelas bagi saya bagaimana skrip berhenti harus dinamai :(
Jawaban:
Dari dokumen
Itu berarti Anda perlu membuat
service_name/control/X
, X menjadi executable yang akan berjalan ketika Anda mengirimsv
perintah terkait ke layanan, sepertid
perintah (turun). Jika skrip Anda keluar dengan status 0, skrip itu tidak akan mencoba menghentikan layanan itu sendiri.Pada dasarnya Anda memerlukan skrip yang dapat dieksekusi
/etc/sv/<service>/control/d
yang akan melakukan apa pun yang Anda inginkan dan mematikan layanan, membersihkan id dan sebagainya.sumber
Jawaban sederhananya adalah memberi nama skrip pembersihan "layanan / selesai". Script ini dieksekusi ketika "layanan / menjalankan" keluar.
Ada juga "layanan / kontrol / ctrl_char antarmuka. Ini memungkinkan Anda untuk melakukan tindakan yang berbeda tergantung pada perintah yang Anda kirim ke runsv.
sumber
Saya harus menyelesaikan masalah ini sendiri untuk buruh pelabuhan. Saya menjalankan server uwsgi, dan mengirimkan sinyal yang salah dengan buruh pelabuhan (TERM bukannya INT) untuk menghentikan kontainer.
Gagasan file kontrol / x adalah bereaksi terhadap sinyal yang diterima. Dalam kasus saya, saya akan menempatkan
t
file untuk sinyal terminasi ke dalam kendali, karena ini adalah file yang disediakan untuk sinyal term. Skrip harus dapat dieksekusi.Script mengirim sinyal int ke proses uwsgi, yang saya inginkan.
Jika skrip kontrol keluar tanpa kesalahan (kode pengembalian 0) sinyal asli tidak akan dikirim ke proses.
Jadi dalam kasus saya, saya bisa menerima sinyal istilah dan mengirimkan sinyal int untuk proses layanan sebagai gantinya.
sumber