“/Etc/init.d” ve “/ lib / systemd / system” içindeki hizmetler hakkında karıştı


15

Linux dünyasında tamamen yeniyim, söyleyebileceğim yanlış bir şey için çok üzgünüm.

Debian 8.5 makinede bir Mongo DB çalıştırmaya çalışıyorum. Paketi yüklediğimde (önceden percona.com'dan oluşturuldu), aşağıdaki dosyaları fark ettim:

/etc/init.d/mongod (1)
/lib/systemd/system/mongod.service (2)

/Etc/init.d/mongod hakkında

Bunun update-rc.dönyüklemede / diğer belirli sistem durumlarında ( üzerinden kaydedildiği sürece) çağrıldığını anlıyorum (bu konuda teknik bilgi almak istemiyorum, çok fazla bilgi alıyorum ve bu daha az önemli görünüyor).

Bu benim için gayet iyi. Senaryo çok sayıda başlatma yapar ve son olarak mongo daemonunu başlatır. Başlatma, durdurma, yeniden başlatma vb. İçin “tetikleyiciler” var ve anladığım kadarıyla bunları tetikleyebileceğim gibi sudo service mongod <action>.

/Lib/systemd/system/mongod.service hakkında

Bu dosya aynı şeyi yapıyor gibi görünüyor (yani mongo çalıştırmak), ancak daha az yapılandırma ile ExecStart parametresinde sadece bir satır:

[Unit]
Description=MongoDB (High-performance, schema-free document-oriented database)
After=time-sync.target network.target
[Service]
Type=forking
User=mongod
Group=mongod
PermissionsStartOnly=true
EnvironmentFile=/etc/default/mongod
ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}"
PIDFile=/var/run/mongod.pid
[Install]
WantedBy=multi-user.target

Anladığım kadarıyla bu tetiklenebilir sudo systemctl start mongod.

  • Bunun önyüklemede çağrılıp çağrılmadığını anlamıyorum.

  • Neden bu 'hizmet' dosyalarından ikisine ihtiyaç olduğunu ve bir tanesinden nasıl kurtulabileceğimi anlamıyorum (muhtemelen / lib / systemd dosyasındaki dosya çok daha basittir).

  • İkisi arasında herhangi bir ilişki olup olmadığını anlamıyorum.

  • Komut dosyalarında da systemctlçalışan okudum init.dve bu durumda iki dosyadan hangisinin tetikleneceğini anlamıyorum systemctl mongod start.

Ben düşünüyorum bazı fazlalık var ve ben sadece iki yoldan birini seçmek gerekir. Ve emin olmak istiyorum

  • açılışta aradı
  • komutla çağrılabilir ( serviceveya gibi systemctl).

Aklımı temizlememe yardım eder misin? Bazı yorumların yardımıyla muhtemelen odaklanıp soruyu daraltabilirim.

Yanıtlar:


12

Hem init.dkomut dosyanız hem .servicede aynı ada sahip bir systemd dosyanız olduğunda, systemd tüm işlemler için hizmet dosyasını kullanır. serviceKomutun sadece sistemd'e yönlendireceğine inanıyorum . İnit.d betiği yoksayılır.

Kullanın systemd. Debian 8'de yeni, ancak varsayılan. Systemd hizmet dosyalar vardır sözde Init.d komut daha basit bakmak için. Systemd hizmeti tarafından desteklenmeyen özel bir özellikten bahsetmediniz.

Hizmet dosyası dahil edilmemişse systemd, init.d komut dosyasını memnuniyetle kullanır. Bu yüzden mongod paketi geliştiricisi size bu systemd tanımının daha iyi olduğunu düşündüklerini söylüyor :).

Çıkışına bakın systemctl status mongod. Hizmetin önyükleme zamanında başlatılması etkinleştirilirse, Loaded:satırda "etkin" görüntülenir. Aksi takdirde kullanabilirsiniz systemctl enable mongod. Ayrıca seçeneği dahil edebilirsiniz --nowve aynı anda mongod başlayacaktır.


Teşekkür ederim! Systemd çalışacağım ve sonunda kullanacağım. Şimdilik bunu devre dışı bırakmak ve sonunda üzerinde çalıştığım init.d komut dosyasını çalıştırmak istedim. Gittim systemctl disable mongod:; daha sonra mongod.service adını mongod-backup.service olarak yeniden adlandırdı; sonra systemctl daemon-reload. Bunun doğru olduğunu düşünüyor musun? / Lib / systemd / system / içindeki dosyaları değiştirmemelisiniz, ancak yeniden adlandırmadan, sistemctl init.d betiğini görmezden gelmeye devam etti.
natario

/ Lib / systemd içindeki dosyalar conffile değildir. Gerçekten debian paketini kurmayı ve dosyalarını değiştirmeyi (ve daha sonra paketi güncellemeyi) tavsiye edemem. Bunun yerine, üzerinde çalıştığınız init.d betiğini yeniden adlandırmalısınız (muhtemelen değiştiriliyor mu?). init.d scriptleri konfilli olma eğilimindedir. Bir güncelleme bir conffile'ı değiştirirse (bunun herhangi bir nedeni olmamalıdır), önce sizi uyarır. Bu durumda, orijinalin (etkin olarak) silinen init.d betiğinin güncellenmiş bir sürümü kullanıma sunulduysa bunu size bildirmesini beklerim.
sourcejedi

Bağlı olduğunuz hizmetlere yeni hizmetinize sipariş bağımlılıkları eklemeniz gerekebilir mongod. Ayrıca, bazı katı bağımlılıkları kaldırmanız gerekecek, ancak bunu düşünmezdim. Etkilenen hizmetleri değiştirmenin güvenli bir yolu, hizmetleri kopyalamak /etc/systemd/system/ve kopyada değişiklik yapmaktır.
sourcejedi

Genel olarak, systemd ile yapışmanın daha basit olduğunu düşünüyorum. Şimdi bash, init-fonksiyonları ve systemd'nin geri uyumlu özelliklerini inceliyorsunuz . Saf bir SysV başlangıç ​​sistemi öğrenmediğiniz için, böyle bir sistemi kullanırsanız, aslında sistemd'den gelen özelliklerin beklenmesi riski vardır.
sourcejedi
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.