Paket kurulumu sırasında bağımlı hizmetleri yeniden başlatmanın doğru yolu nedir?


10

Bir yapılandırma paketi oluşturuyorum ve yapılandırması etkilenen hizmetleri durdurmak ve yeniden başlatmak istiyorum. Şu anda kullanıyorum service [stop|restart]içinde {pre,post}{inst,rm}yol. Bir soru yerde okumak invoke-rc.dolduğunu doğru bir hizmetle ilgili kullanıcı tercihlerini onurlandırır, çünkü yol. Ancak bununla ilgili herhangi bir yönerge bulamadım. Bu tür yönergeleri bilen var mı? Veya hangi yolu seçmem gerektiği konusunda tavsiyeleriniz var mı? Paket dahili kullanım içindir ve önümüzdeki iki yıl için muhtemelen sadece 14.04 olacaktır. Ancak, halefim için olabildiğince temiz bir devlet bırakmak istiyorum, ben systemdde aklımda.

Gönderen invoke-rc.dadam sayfası :

Debian paketlerinin bakım betikleri tarafından init betiklerine tüm erişim invoke-rc.d aracılığıyla yapılmalıdır .

Debian Politika Kılavuzu, Bölüm 9, Kısım 3.3 :

Bakımcılar, post-post, prerm ve postrm gibi paketlerinin komut dosyalarındaki başyazıları ele almak için update-rc.d ve invoke-rc.d programları tarafından sağlanan soyutlama katmanını kullanmalıdır.

...

Paket bakımcı komut dosyaları, doğrudan çağırmak yerine, /etc/init.d/* initscripts'i çağırmak için invoke-rc.d kullanmalıdır.

Debian kullanmaktadır sysv-initve doğrudan şuna geçecektir systemdve sanırım politika kılavuzuna başvurmak için zamanında güncellenecektir systemctl. Ancak, belirsiz olduğum şey şu: Bunun invoke-rc.dyerine kullanmalı mıyım service? Söyleyebileceğim dpkgyüzden anlamanın bir yolu yoktur, ben (tetikleyiciler aracılığıyla) bazı dosyalarda ilgilenen olduğumu dpkgben de bazı hizmetler ilgilenen olduğumu ve almak dpkgyükleme / yeniden başlatılması yapmalı?

Netleştirmek için: Ben init senaryo yazıyor değilim. Kukla, NTP, vb.Gibi diğer uygulamalar için yapılandırmalı bir paket sağlıyorum, bu yüzden komut dosyalarındaki ilgili hizmetleri durdurup yeniden başlatıyorum.

Burada , örneğin yaklaşık bir Docker konudur invoke-rc.dvs service. Sorun hala açıktır, bir kişi, muhtemelen bir bakıcı, bunu kesinlikle doğru şekilde yapmakla ilgilendiklerini söyler - açıkça hiçbirimiz bunun ne olduğundan emin değiliz. (Sorum bu sorundan bağımsız.)

Yanıtlar:


5

Öncesi / sonrası inst komut dosyalarını kullanmaya devam ederdim,

preinst - Bu komut dosyası, paketin Debian arşiv (".deb") dosyasından paketi açılmadan önce yürütülür. Birçok 'preinst' komut dosyası , yükleme veya yükseltme tamamlanana kadar yükseltilen paketler için hizmetleri durdurur ('postinst' komut dosyasının başarıyla yürütülmesini takiben).

postinst - Bu komut dosyası, foo Debian arşiv (".deb") dosyasından açıldıktan sonra, genellikle paket foo'nun gerekli yapılandırmasını tamamlar. Genellikle, 'postinst' komut dosyaları kullanıcıdan giriş ister ve / veya kullanıcıyı varsayılan değerleri kabul ederse, geri dönüp bu paketi durumun gerektirdiği şekilde yeniden yapılandırması gerektiğini uyarması için uyarır. Birçok 'postinst' komut dosyası daha sonra yeni bir paket yüklendikten veya yükseltildikten sonra bir hizmeti başlatmak veya yeniden başlatmak için gerekli tüm komutları yürütür .

bkz. - https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html

Start | stop | restart komutunun sözdizimi koşullu olarak yazılır, bkz. Https://www.debian.org/doc/debian-policy/ch-opersys.html bölüm 9.3.3.2 Initscripts çalıştırma

hangi çağırırsa-rc.d> / dev / null 2> & 1; sonra

invoke-rc.d paketi

Başka

/etc/init.d/package

fi

yani ...

if which service >/dev/null 2>&1; then
        service package <action>
elif which invoke-rc.d >/dev/null 2>&1; then
        invoke-rc.d package <action>
else
        /etc/init.d/package <action>
fi

ve gerektiğinde systemd için başka bir koşul ekleyin;)

Bu nedenle evet, bir hizmeti başlatmak için uygun bir yol, mümkün olduğunda init komut dosyasını (/etc/init.d/package) çağırmak yerine uygun sarmalayıcı komut dosyası (invoke-rc.d / system) kullanmaktır ve sarmalayıcı olmadığında /etc/init.d komut dosyasına geri döner.


Bu, biri hariç şüphelerimin çoğuna hemen hemen cevap veriyor. invoke-rc.dMan ve Debian politika dokümanlar ile bağlantılı olarak kullanmak söyler /etc/init.d/(hala sysv init kullanılan olasılıkla) komut. Upstart veya systemd ile bu nasıl değişir?
muru

Sorunuzu güncelleyin veya okuduğunuz bilgilere bir bağlantı gönderin. Man sayfasında ambalaj hakkında hiçbir şey görmedim. Hizmetinize ve init betiğine bağlı olduğunu varsayalım (uptart? Systemd?) Askubuntu.com'da soruyorsunuz ve ubuntu upstart kullanıyor, bu yüzden askubuntu.com/questions/58404/how-to-start-and-stop -a-hizmet . Paketiniz eski init komut dosyası kullanıyorsa, gerektiği anda ve uzun vadede systemd için sonradan görme için dönüştürülmüş olması.
Panther

Soruyu güncelledim.
muru

"O bağlıdır" gibi soru için kolay veya tek bir cevap yoktur Bu ubuntu ve debian her ikisi de systemd kullanacağından biraz geçici bir durum. Debian (veya Ubuntu) üzerinde sysv-init ve service kullanan servisler için invoke-rc.d'yi upstart kullanan hizmetler için Ubuntu üzerinde kullanmalısınız. Komut dosyası, bu yüzden gerekirse yaratıcı oluninvoke-rc.d ... || service ...
Panther

Komut dosyanızın sözdizimini değil, pre / post inst komut dosyalarını kullanmanız gerekip gerekmediğini sorduğunuzu sanıyordum.
Panther

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.