Soru Runit özel stop komut dosyası nasıl yazılır


Özel bir "dur" betiğine sahip olmak istiyorum runit (runsv) işlemi durdurmak / yeniden başlatmak gerektiğinde yürütmek. Şu anda süreci basitçe öldürür, sonra "bitir" komut dosyasını çalıştırır. Ama benim durumumda, sürecim dinamik bir şekilde çocuk süreçlerini ortaya çıkarır, bu yüzden basit yerine kill, İhtiyacım var "killtree" Onlardan kurtulmak için. Bunu nasıl yaparım?

Biliyorum ki üzerinden yapılmalı control runit seçenekleri ama docs okuma gelen bana gerçekten durmak nasıl stop script nasıl adlandırılmalıdır :(

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


9
2017-07-23 16:13


Menşei


Hizmetiniz (komut dosyası değil, program) yanlış davranıyor, kendi çocuklarından sonra toplanmalı / temizlenmelidir. Sadece merak, ne var? - Avery Payne


Cevaplar:


Dokümanlardan

Kontrol borusuna gönderilen her kontrol karakteri c için önce çalışır   servis / kontrol / c olup olmadığını ve çalıştırılabilir olup olmadığını kontrol eder. Eğer öyleyse, başlar   servis / kontrol / c ve yorumlamadan önce sonlandırmak için bekler   komuta. Program dönüş kodu 0 ile çıkarsa, runv refrains   servisin ilgili sinyali göndermesi. O komuttur   her zaman komut olarak kabul edilir. D komutunda ilk servis / kontrol / t   kontrol edilir ve ardından servis / kontrol / d. İlk önce x komutunda   servis / kontrol / t kontrol edilir ve ardından servis / kontrol / x. Kontrol   İsteğe bağlı günlük hizmetinin özelleştirilemez.

Bu, bir service_name/control/X, X ilgili gönderirken çalıştırılacak bir çalıştırılabilir sv hizmete komut vermek d komut (aşağı). Komut dosyanız 0 durumundan çıkarsa, hizmetin kendisini indirmeye çalışmaz.

Temel olarak, üzerinde çalıştırılabilir bir betiğe ihtiyacınız var /etc/sv/<service>/control/d İstediğinizi yapacak ve hizmeti öldürecek, çöpleri temizleyecek vb.


11
2017-07-23 16:57



runv dir'in çalışma şekli gerçekten ilginç ve basit. - nXqd


Basit cevap, temizlik komut dosyanızı "servis / bitiş" olarak adlandırmaktır. Bu komut, "servis / çalışma" çıktığı zaman yürütülür.

Ayrıca bir "service / control / ctrl_char interface" vardır. Çalıştırdığınız komutlara göre farklı eylemler gerçekleştirmenizi sağlar.


2
2017-07-23 17:05



hizmet / bitiş, TERM CONT'ın çalışan servise gönderilmesinden sonra çalışır. Öldürdükten sonra temizlik hizmeti gibidir. - MaximKostrikin


Bu problemi docker için kendim çözmem gerekti. Ben uwsgi sunucu çalıştıran ve konteyner durdurma üzerine docker (INT yerine TERM) tarafından yanlış bir sinyal gönderildi.

Kontrol / x dosyaları fikri, alınan sinyale tepki vermektir. Benim durumumda bir t terminale ait dosya, termik sinyal için ayrılan dosya olduğundan, kontrolü sonlandırır. Komut dosyası çalıştırılabilir olmalıdır.

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

Komut, uwsgi sürecine int sinyalini gönderir, istediğim budur.

Kontrol komut dosyası hatasız çıkıyorsa (dönüş kodu 0) orijinal sinyal işleme gönderilmeyecektir.

Bu yüzden benim durumumda, sinyal terimini ve servis sürecine int sinyalini gönderebiliyordum.


0
2017-08-18 11:28