hazır olma protokolü uyumsuzluğu
Wieland'ın ima ettiği Type
gibi, hizmet önemlidir. Bu ayar, sisteme hazır olma protokol sisteminin konuşmayı beklediğini gösterir . Bir simple
hizmetin hemen hazır olduğu varsayılır. Bir forking
hizmet, ilk süreci bir çocuğu çatalladıktan ve sonra çıktıktan sonra hazır olarak alınır. Bir dbus
hizmet sunucu Masaüstü Bus göründüğünde hazır olması alınır. Ve böylece.
Hizmet biriminde, hizmetin ne yaptığına uygun olarak bildirilmek üzere hazır olma protokolünü almazsanız, işler ters gider. Hazırlık protokolü uyumsuzlukları, hizmetlerin doğru şekilde başlamamasına veya (daha genel olarak) sistemd tarafından başarısız olarak (yanlış) tanılanmasına neden olur. Bir hizmetin systemd başlatılamaması olarak görüldüğünde , hizmetin etkin olmayan bir şekilde geri etkin hale getirilmesi için, arızanın bir parçası olarak çalışmasına izin verilebilecek her yetim ek hizmet işleminin (kendi bakış açısından) öldürülmesini sağlar. durum.
Tam olarak bunu yapıyorsun.
Her şeyden önce, basit şeyler: sh -c
uyuşmuyor Type=simple
veya Type=forking
.
Olarak simple
protokol, başlangıç işlem için alınır olmak hizmet işlemi. Ancak aslında bir sh -c
sarıcı, gerçek hizmet programını bir alt süreç olarak çalıştırır . Yani MAINPID
yanlış gidiyor ve ExecReload
yeni başlayanlar için çalışmayı bırakıyor. Kullanırken Type=simple
, ilk etapta ya kullanmalı sh -c 'exec …'
ya da kullanmamalı sh -c
. İkincisi, bazı insanların düşündüğünden daha doğru bir seyirdir.
sh -c
eşleşmiyor Type=forking
. Bir forking
hizmet için hazır olma protokolü oldukça spesifiktir. İlk işlem bir çocuğu çatallamak ve sonra çıkmak zorundadır. systemd bu protokole bir zaman aşımı uygular. İlk işlem ayrılan süre içinde çatallanmazsa, hazır olmak başarısız olur. İlk işlem ayrılan süre içinde çıkmazsa, bu da bir başarısızlıktır.
gereksiz korku ossec-control
Bu da bizi karmaşık şeylere getiriyor: o ossec-control
senaryo.
Görünüşe görerc
, kendi dönüş çatallarında ve çıkışlarında da 4 ila 10 süreç arasında çatal yapan bir Sistem 5 betiği. Bir rc
dizi sunucu işlemini tek bir komut dosyasında, for
döngüler, yarış koşulları, sleep
bunlardan kaçınmaya çalışmak için keyfi s, sistemi yarı başlangıç durumunda boğabilecek arıza modları ile yönetmeye çalışan Sistem 5 komut dosyalarından biridir. ve insanları yirmi yıl önce AIX Sistem Kaynağı Kontrolörü ve daemontools gibi şeyleri icat eden diğer tüm dehşet. Ve bir ikili dizindeki gizli kabuk komut dosyasını, kendine özgü enable
ve disable
fiilleri uygulamak için anında yeniden yazdığını unutmayalım .
Öyleyse ne /bin/sh -c '/var/ossec/bin/ossec-control start'
olduğu şu:
- systemd, hizmet süreci olmasını beklediğini çatallar.
- Çatal olan kabuk budur
ossec-control
.
- Bu da 4 ila 10 torun arasında çatal.
- Torunların hepsi çatal ve sırayla çıkıyor.
- Büyük torunların hepsi çatal ve paralel olarak çıkarlar.
ossec-control
çıkışlar.
- İlk kabuk çıkar.
- Hizmet süreçleri vardı büyük büyük torun, ancak çalışma maçların bu şekilde çünkü ne
forking
desimple
hazırlık protokolü, systemd bir bütün olarak hizmet gördüğü bu geri adım başarısız oldu ve kapanır olması.
Bu dehşetten hiçbiri aslında sistemd altında gerekli değildir. Hiçbiri.
bir sistem şablonu şablonu hizmet birimi
Bunun yerine, çok basit bir şablon birimi yazar :
[Birim]
Açıklama = OSSEC HIDS% i sunucusu
= Network.target sonra
[Hizmet]
Tür = basit
ExecStartPre = / usr / bin / env / var / ossec / bin /% p-% i -t
ExecStart = / usr / bin / env / var / ossec / bin /% p-% i -f
[Yüklemek]
WantedBy = multi-user.target
Bunu olarak kaydedin /etc/systemd/system/ossec@.service
.
Çeşitli gerçek hizmetlerdir örneklemi adlı bu şablonun ait:
ossec@dbd.service
ossec@agentlessd.service
ossec@csyslogd.service
ossec@execd.service
ossec@agentd.service
ossec@logcollector.service
ossec@syscheckd.service
ossec@maild.service
ossec@analysisd.service
ossec@remoted.service
ossec@monitord.service
Ardından etkinleştirme ve devre dışı bırakma işlevi , gizli kabuk komut dosyalarına gerek kalmadan doğrudan hizmet yönetim sisteminden ( RedHat bug 752774 sabit) gelir.
systemctl etkinleştir ossec @ dbd ossec @ agentlessd ossec @ csyslogd ossec @ maild ossec @ execd ossec @ analydes ossec @ logcollector ossec @ remoted ossec @ syscheckd ossec @ monitord
Dahası, systemd her bir gerçek servisi doğrudan tanır ve takip eder. Günlüklerini filtreleyebilir journalctl -u
. Bireysel bir hizmetin ne zaman başarısız olduğunu bilebilir. Hangi hizmetlerin etkinleştirilmesi ve çalıştırılması gerektiğini bilir.
Bu arada: Type=simple
ve -f
seçenek burada diğer birçok durumda olduğu gibi. Vahşi Çok az servisler aslında hazır olduklarını işaret kuvvetiyle tarafından exit
ve burada bu ya böyle vakalar değildir. Ama forking
tipin anlamı budur. Vahşi hizmet sadece çatal ve çıkış bazı yanlış alınan bilgelik kavramı nedeniyle dæmons yapması gerekiyordu. Aslında öyle değil. 1990'lardan beri olmadı. Yakalama zamanı.
daha fazla okuma