Systemd /etc/init.d scriptlerini nasıl kullanır?


120

Debian Jessie'ye yeni geçtim ve grafik ekran yöneticim de dahil olmak üzere çoğu şey yolunda gidiyor wdm.

Mesele şu ki, bunun nasıl çalıştığını anlamıyorum. Açıkçası benim /etc/init.d/wdmsenaryom denir, çünkü ben exitoraya erken koyduğumda , wdm başlatılmadı. Ama /etc/rc3.d dizinini alternatif olarak yeniden adlandırdığımda (varsayılan çalışma seviyem 3'tür), o zaman wdm hala başlatılıyor.

Systemd'nin bu betiği nasıl bulduğunu bulamadım ve diğer tüm init.d betiklerine ne yaptığını anlamadım.

  • Systemd init.d scriptlerini ne zaman ve nasıl çalıştırır?
  • Uzun vadede, tüm init.d scriptlerinden kurtulmalı mıyım?

Yanıtlar:


166

kaosun cevabı, bazı belgelerin söylediği şey. Ama aslında sistemd'in yaptığı şey değil. (Van Smoorenburg'un rcyaptığı da değil. Van Smoorenburgrc , başlangıç ​​olarak statik siparişleri hesaplamakta kullanılan LSB başlıklarını kesinlikle görmezden gelmediinsserv .) Freedesktop belgelerinin "Uyumsuzluklar" sayfası aslında yanlış. bunlar ve diğer noktalar. ( HOMEAslında ortam değişkeni olduğunu sık sık, örneğin ayarlayın. Bu tamamen gitti uzun süre bir yere belgelenmemiş. Şimdi kılavuzda belgelenmiş oluyor, en azından, ama FreeDesktop WWW sayfa hala düzeltilmiş edilmediğini.)

Systemd için yerel servis formatı servis birimidir . systemd'in servis yönetimi, yalnızca (sistem genelinde) .servicedosyaların yaşayabileceği dokuz dizinden birinin okuduğu şekilde çalışır . /etc/systemd/system, /run/systemd/system, /usr/local/lib/systemd/systemVe /usr/lib/systemd/systembu dizinlerin dört bulunmaktadır.

Van Smoorenburg rcsenaryolarıyla uyumluluk , adında bir dönüşüm programı ile sağlanır systemd-sysv-generator. Bu program /usr/lib/systemd/system-generators/dizinde listelenir ve bu nedenle her önyüklemede önyükleme işleminin başında sistemd tarafından otomatik olarak çalıştırılır ve her sistemde yapılandırmasını daha sonra yeniden yüklemesi istendiğinde tekrar çalıştırılır.

Bu program, bir jeneratörüdür ; işi anında servis ünitesi dosyaları oluşturmak olan bir yardımcı program türüdür, bu dokuz dizinden üçünün (yalnızca üreticiler tarafından kullanılması amaçlanmıştır) yerleştirildiği bir tmpfs içinde. systemd-sysv-generatorVan Smoorenburg rcsenaryolarını çalıştıran servis ünitelerini üretir /etc/init.d, eğer bu ad ile diğer altı konumda mevcut olan bir yerel sistem ve servis ünitesini bulamazsa.

sistemd servis yönetimi sadece servis birimlerini bilir. Bu otomatik (yeniden) üretilen servis birimleri van Smoorenburg rcsenaryolarını çağırmak için yazılır . Diğer şeylerin yanı sıra var:

[Birim]
KaynakYolu = / etc / init.d. / wibble
[Hizmet]
ExecStart = / etc / init.d / wibble start
ExecStop = / etc / init.d / wibble stop

Alınan bilgelik, van Smoorenburg rcsenaryolarının bir LSB başlığına sahip olması gerektiği ve /etc/rc?.d/sistemin getirdiği öncelikleri yerine getirmeden paralel olarak çalıştırıldığı yönündedir . Bu tüm noktalarda yanlıştır.

Aslında, bir LSB başlığına sahip olmaları gerekmez ve eğer systemd-sysv-generatordaha sınırlı eski RedHat yorum başlıklarını ( description:, pidfile:vb.) Tanıyamazlarsa. Dahası, bir LSB başlığının yokluğunda, /etc/rc?.dsembolik link çiftliklerinin içeriğine geri dönecek , link isimlerine kodlanmış öncelikleri okuyacak ve onlardan sipariş vermeden önce / sonra hizmetleri inşa ederek dizileri oluşturacak. Yalnızca LSB başlıkları bir zorunluluk değil, işleri bir dereceye kadar seri hale getiren siparişlerden önce / sonra kendilerini kodlamakla kalmazlar, onların tam yokluğundaki geri dönüş davranışı aslında önemli ölçüde paralel olmayan bir işlemdir.

Önemsiz /etc/rc3.dgörünen sebep, muhtemelen o betiği başka bir /etc/rc?.d/dizin aracılığıyla etkin hale getirmiş olmanızdır . systemd-sysv-generatorhiçbirinde listelenmesini çevirir /etc/rc2.d/, /etc/rc3.d/ve /etc/rc4.d/bir yerli içine Wanted-Bysystemd giden tarihiyle ilişkisi multi-user.target. Koşu seviyeleri sistem dünyasında "modası geçmiş" ve onları unutabilirsiniz.

daha fazla okuma


2
Debian yılında sistem jeneratörler dizin / lib / usr / lib yaşamak değil, packages.debian.org/sid/amd64/systemd/filelist
Braiam

5
Bu kesinlikle şaşırtıcı bir cevap. Aferin efendim.
soyucu

1
Teşekkürler, teşekkür ederim, bunun için teşekkür ederim! Debian 8 ve RH / CentOS 7 sistemlerinin bir karışımı ile uğraşmak, SysVInit - Systemd hizmet bağımlılığı yönetimini biraz baş ağrısından yönetti, ancak sistemin ne yaptığını bu açıklama, çok iyi anlamamı sağladı.
Toby

Bu jeneratör çalışıyor. Ayrıca, izleyiciler için, daha eski bir sürümünüz varsa systemdve /etc/init.d betiğinin "başlangıçta önyükleme" olarak ayarlanmamış olması durumunda, beklendiği gibi çalışacağını ancak görünmeyeceğini show-show listeleri: unix.stackexchange.com/a/518894/8337
rogerdpack

Bu jeneratör çalışıyor. Ayrıca, izleyiciler için, eğer "başlangıçta önyükleme" olarak ayarlanmamış eski bir systemd sürümüne ve /etc/init.d betiğine sahipseniz, yine de systemctl kullanıldığında beklendiği gibi başlayacağını / durduğunu söyleyeceğim. -sistemleri listelerinde görünmüyor : unix.stackexchange.com/questions/517872/… ayrıca NB, bu hizmeti doğrudan /etc/init.d/xx doğrudan çalıştırarak kontrol edemediğiniz veya sistemd " ... neyin çalıştığı ve neyin olmadığına dair karıştı: |
rogerdpack

17

Systemd, SysV init betikleri ile geriye doğru uyumludur . LSB 3.1'e göre, init betiğinin , betiğin ne zaman başlaması / durması gerektiğini ve komut dosyasının başlaması / durması için ne yapılması gerektiğini tanımlayan bilgilendirici Yorum Kuralları olması gerekir . Bu bir örnektir:

### BEGIN INIT INFO
# Provides: my-service
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop service my-service
# Description: my-service blah blah ...
### END INIT INFO

Bu, SysV tarafından ihmal edilen yorumlanmış bir bölümdür. Öte yandan, systemd bu bağımlılık bilgisini okur ve buna bağlı olarak bu komut dosyalarını çalıştırır.

Fakat systemd ve SysV'nin init betikleri bakımından farklı olduğu bir nokta var. SysV, dosya adındaki sayılarına bağlı olarak komut dosyalarını sırayla yürütür. Systemd değil. Bağımlılıklar sağlandığı takdirde, systemd komut dosyası adlarının numaralandırılmasına uymadan komut dosyalarını derhal çalıştırır. Bazıları sipariş nedeniyle büyük olasılıkla başarısız olacak. Göz önünde bulundurulması gereken çok sayıda uyumsuzluk var.


Aynı hizmet için init betikleri ve .service dosyaları varsa, bağımlılıklar karşılanır karşılanmaz sistemd hem de yürütecektir (init betiği durumunda, LSB başlığında tanımlananlar).


Tamam, ama aynı zamanda / lib / systemd / system / dizininde bir sürü .service dosyam var. Systemd gerçekte ne yürütür? Hizmet dosyalarında (bağımlılık sırasına göre), init.d komut dosyalarında veya her ikisinde ne belirtilir?
Martin Drautzburg

@MartinDrautzburg Ben cevaba ekledi
kaos

1
Bir kurban olarak Debian, LSB uyumluluğunu bıraktığını
Ocak

systemd, SysV scriptleri ile uyumlu birşeydir. Yalnızca bu ifade yanlış değil, başvurulan bağlantı yalnızca "çoğunlukla uyumlu" olduğunu ve aynı sonuçları elde etmek için gereken çabanın çok büyük olduğunu açıkça ortaya koyuyor.
Julie, Austin'de
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.