Runit özel durdurma komut dosyası nasıl yazılır


12

İşlemi durdurmak / yeniden başlatmak zorunda kaldığınızda yürütmek için özel bir "durdurma" komut dosyası runit( runsv) olmasını istiyorum. Şu anda sadece süreci öldürüyor, sonra "bitiş" komut dosyasını çalıştırıyor. Ama benim durumumda, sürecim dinamik olarak alt süreçleri doğuruyor, bu yüzden basit yerine onlardan kurtulmak için killbir ihtiyacım var "killtree". Bunu nasıl yaparım?

controlRunit seçenekleri ile yapılması gerektiğini biliyorum ama docs okumaktan bana stop script nasıl adlandırılması gerektiğini gerçekten net değil :(

http://smarden.org/runit/runsv.8.html


Hizmetiniz (komut dosyası değil, program) yanlış davranıyor gibi görünüyor, kendi çocuklarından sonra biçilmeli / temizlenmelidir. Sadece merak ediyorum, nedir bu?
Avery Payne

Yanıtlar:


13

Dokümanlardan

Kontrol borusuna gönderilen her bir kontrol karakteri c için, runv önce service / control / c'nin var olup olmadığını ve çalıştırılabilir olup olmadığını kontrol eder. Eğer öyleyse, service / control / c komutunu başlatır ve komutu yorumlamadan önce sona ermesini bekler. Program dönüş kodu 0 ile çıkarsa, çalışır hizmete karşılık gelen sinyali göndermekten kaçınır. O komutu her zaman u komutu olarak kabul edilir. D komutunda önce service / control / t kontrol edilir ve sonra service / control / d kontrol edilir. Komut x'de önce service / control / t işaretlenir ve sonra service / control / x işaretlenir. İsteğe bağlı günlük hizmetinin denetimi özelleştirilemez.

Bu service_name/control/X, ilgili svkomutu hizmete gönderirken çalıştırılacak bir çalıştırılabilir dosya olmak üzere bir, X oluşturmanız gerektiği anlamına gelir d(komut) (aşağı). Komut dosyanız durum 0'dan çıkarsa, hizmetin kendisini kapatmaya çalışmaz.

Temelde istediğiniz /etc/sv/<service>/control/dher şeyi yapacak ve hizmeti öldürecek, pids temizleyecek vb.


gerçekten ilginç ve basit bir şekilde çalışır.
Dzung Nguyen

2

Basit cevap temizleme betiğinize "service / finish" adını vermektir. Bu komut dosyası, "hizmet / çalıştırma" çıktığında yürütülür.

Ayrıca bir "service / control / ctrl_char arabirimi de vardır. Çalıştırdığınız komutlara bağlı olarak farklı işlemler gerçekleştirmenizi sağlar.


1
service / finish, TERM CONT çalışmakta olan servise gönderildikten sonra çalışır. Daha çok öldürmeden sonra takas hizmetine benzer.
MaximKostrikin

2

Bu sorunu liman işçisi için kendim çözmek zorunda kaldım. Çalışan uwsgi sunucusu vardı ve konteyner durdurma docker (INT yerine TERM) tarafından yanlış sinyal gönderildi.

Kontrol / x dosyalarının fikri, alınan bir sinyale tepki vermektir. Benim durumumda t, terminat sinyali için bir dosyayı kontrole yerleştiririm, çünkü terim sinyali için ayrılmış dosyadır. Komut dosyası yürütülebilir olmalıdır.

#!/bin/bash
kill -INT `cat /tmp/project-master.pid`

Komut dosyası uwsgi işlemine bir int sinyali gönderir.

Kontrol komut dosyası hatasız olarak çıkarsa (dönüş kodu 0), orijinal sinyal işleme gönderilmez.

Yani benim durumumda sinyal terimini alabildim ve bunun yerine servis sürecine int sinyali gönderebildim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.