İlk systemd
birim dosyamı yazıyorum .
Çünkü Type
, birkaç seçenek vardır: forking
,, simple
vb . Bu konuyla ilgili Redhat Belgelerini okudum (Tablo 9.9), ancak hangi seçeneği kullanmam gerektiğinden hala emin değilim.
Yönerge var mı?
İlk systemd
birim dosyamı yazıyorum .
Çünkü Type
, birkaç seçenek vardır: forking
,, simple
vb . Bu konuyla ilgili Redhat Belgelerini okudum (Tablo 9.9), ancak hangi seçeneği kullanmam gerektiğinden hala emin değilim.
Yönerge var mı?
Yanıtlar:
Hizmeti komut satırından el ile başlattığınızda ( arka planda çalıştırmak için nohup
önek komutunu veya &
soneki kullanmadan veya başka bir deyişle, yalnızca dosya ExecStart=
satırına koyacağınız komutu çalıştırın .service
), ne olur?
a) Hizmet başlar ve çalışmaya devam ederse ve siz Control-C tuşlarına basana veya hizmeti başka bir şekilde durdurana kadar geri dönmezse: Type = simple
doğru seçimdir.
b) Bilgi istemi geri döner ancak hizmet arka planda çalışmaya devam ederse (yani hizmet kendi kendine daemonize olursa), Type = forking
doğru seçimdir.
c) Hizmet işini yaparsa ve çalışan herhangi bir şey bırakmadan komut istemine geri dönerse (örneğin, hizmet yalnızca bazı çekirdek ayarlarını yapar, başka bir şeye komut gönderir veya benzer bir şey yaparsa), Type = oneshot
muhtemelen doğru seçimdir. Bu durumda, ExecStart
hizmetin bir şeyi "ayarlama" komutu olabilir ve "ayarı" ExecStop
kaldırmaya karşılık gelen komut olabilir. Bu tür genellikle yararlanır RemainAfterExit=true
, bu nedenle systemd, bu hizmetin "durumunu" en son "ayarlanmış" veya "ayarlanmamış" olup olmadığına göre izler.
Diğer Type
değerler özel durumlardır. Örneğin, hizmet bir D-Bus bağlantısı kullanıyorsa, Type = dbus
en iyi seçim olabilir. Bu systemd
durumun farkında olur ve daha sonra systemd bu hizmeti (ve ona bağlı olan her şeyi) D-Bus'ta bu hizmetin varlığıyla izler.
Type = notify
İşlemin kullanılabilmesi için ortam değişkeninde belirtilen Unix soketine bağlanabilmesi $NOTIFY_SOCKET
ve gerektiğinde bu sokete mesaj yazarak durumunu bildirebilmesi gerekir. Ayrıca hizmet dosyası NotifyAccess
, bildirim soketine uygun şekilde erişim verme seçeneğini belirtmelidir .
Bu iletileri göndermek için kullanabileceğiniz bir komut satırı yardımcı programı systemd-notify
ve bir C kitaplığı işlevi vardır sd_notify(3)
, ancak bunlardan hiçbiri gereksinimlerinize uygun değilse, kendi ileti göndericinizi uygulayabilirsiniz. Gerekli iletiler çok basittir ve kabuk değişkeni atamalarına benzer: örneğin, hizmetin başlatmayı başarıyla tamamladığını ve gelen istekleri sunmaya hazır olduğunu bildirmek için, hizmetin çıkışına eşdeğer olan dizeyi printf "READY=1\n"
sokete göndermesi gerekir . man 3 sd_notify
Tanınan mesajlar hakkında daha fazla bilgi için bkz .
Not: Birçok Unix tarzı sisteme taşınabilir olarak tasarlanan birçok hizmet uygulaması varsayılan olarak b) gibi davranabilir, ancak a) bir seçenek ekleyerek (genellikle "çatal yapma" olarak tanımlanır) çalışmaya devam edebilir ön planda "," artalan etme "veya benzeri). Bu durumda, seçeneğin başka bir yan etkisi yoksa, seçeneği eklemek ve a) tipi davranışı kullanmak tercih edilir systemd
.
apachectl start
Belki de kök olarak koşarak ? Yapmayı deneyin ve ne olduğunu görün. Sonra cevabımdan a), b) veya c) seçin. Eminim istemi geri döner ve Apache çalışmaya devam eder, bu yüzden b) cevap olur.
Type=notify
?
Type=notify
.
apache
, hangi tip kullanılmalı?