Linux'ta hizmetleri başlatmanın ve durdurmanın standart bir yolu var mı?


15

Yakın zamana kadar hizmetleri başlatmak / durdurmak / yeniden başlatmak için basit ve etkili bir yol vardı:

service nginx start|stop|restart

Bu, uzun yıllar boyunca mükemmel çalıştı, ... bazı akıllı pantolonlar onları geliştirmeye karar verene kadar ve şimdi servicebetiğin hiçbir şey yapmadığı Debian / Ubuntu sistemleriyle karşı karşıyayım (gibi şeyleri kullanmam gerektiği için systemctl start nginx.service(çok daha uzun otomatik tamamlama çalışma yok, ...)

Sorum özellikle Debian ve Ubuntu ile ilgilidir ancak CentOS / RedHat dağıtımlarını da kapsamak yararlı olacaktır.

Peki, beni bu kıyamet değişikliklerinden kurtarabilecek bir şey var mı?

Açık değilse, Debian 7.x, 8.x, en son Ubuntu LTS ve LTS olmayanlar üzerinde çalışacak olanlarla başa çıkmak için tutarlı bir yol arıyorum.

PS. Bu özel sorunun kapsamı dışında, ancak çözümün hizmetler için etkinleştirme ve devre dışı bırakma kısmını da kapsaması durumunda verilen ekstra kudos.


5
Sekme tamamlama benim için systemctl için çalışıyor ... Ve beğen ya da beğenme, systemd şu an fiili standarttır: buna alışabilir.
jasonwryan

1
Ekstra: hizmet komutu işe yaramazsa, kaldırabilir miyim? Hangi paketi sağlıyor?
sorin

3
Eski servicekomutu yerine servicectl çağıran bir sarmalayıcıyla değiştirmek mantıklı değil mi?
sorin

4
@jasonwryan Evet, ancak bunu da yapabilirsiniz ve bir paketleyici bunu kaldırabilir ve bu da sistemd'e geçişi kullanıcılar için daha pürüzsüz hale getirir.
Dmitry Grigoryev

2
serviceGerçekten senin için hiçbir şey yapmıyor mu ? LMDE (temelde Debian testi) beklediğim gibi çalışır, bunun LMDE'ye özgü bir şey olduğunu düşünmüyordum. Ayrıca Ubuntu VM'imde beklendiği gibi çalışıyor.
terdon

Yanıtlar:


6

Karışık geçmişi boyunca Unix platformları üzerinde çeşitli önyükleme ve servis kontrol sistemleri vardır.

service\chkconfigBulduğunuz tabanlı sistem basit ve etkili genellikle olarak anılır sysvinit stil ve standardizasyon çeşit yol boyunca büyük bir adım oldu. 2015'e kadar RHEL / CentOS (EL), 6 sürüm, Fedora 14 ve Debian / Ubuntu tabanlı dağıtımlarda bu önyükleme stilini bulacaksınız. Yine de (daha basit) BSD stili, tek önyükleme sistemi değildi. init sisteminin hala birçok hayranı var.

SysVinit mükemmel bir çözüm değildi (nedir?) Ve Systemd birçok sorunun üstesinden gelmek için tasarlandı; bu, systemctlşu anda yaşadığınız komut tabanlı sistemdir. Her ne kadar evrensel olarak sevilmese de (insanlar değişimden, şişkinlikten, nefret etmekten nefret ediyorlar), dağıtımların çoğunda hızlı bir şekilde defacto standardı haline geldiğinden şüphe yoktur.

Bu nedenle, hemen görünümlü orijinal sorunun cevabını iletecek basitçe: Standart genelinde denetim hizmetlerine yolu en Linux dağıtımlarının artık ! Bunun ne kadar süre geçerli olacağı herkesin tahminidir; muhtemelen bir şey ortaya çıkana kadar daha iyi ve yaygın olarak benimsenir.
systemctl

Eminim şu anki favoriniz, service/chkconfigçoğunlukla aklı başında şeyler yapmaya devam etmek için komutlara izin verilecek sarmalayıcılar olacaktır , ancak bu özel öğrenme eğrisi ile muhtemelen savaşmamak en iyisidir. Belki ileriye baktığımızda, bir süre systemctldaha eski sistemler için onları daha güncel olanlarla birlikte yönetmek için daha az acı çekecek;


Ve bundan önce xinetd ve ondan önce inetd
jas-

@ jas- Bence inetd'ler gerçekten kendileri için hizmet, sanırım tüm önyükleme sistemlerinde var olabilirler. Diğer bazı hizmetlerin talep üzerine sunarak tam hizmet olarak çalışmasına bir alternatif sunmaları nedeniyle özel bir hizmet türüdür . Bu Q bağlamında nereden geldiğinizi anlıyorum, hizmetlere başlamanın başka bir yolu.
DanSut

Tüm dağıtımlarda; gentoo, centos, redhat, debian, ubuntu vs., xinetd ve daha önce inetd, çeşitli hizmetler için yapılandırmaları başlatmak, durdurmak ve yeniden yüklemek için küçük kabuk betiğinden oluşuyordu, ancak evet hakikaten sistemd gibi bir hizmetti.
jas-

Ubuntu 6.10'dan beri upstart ve 9'dan beri Fedora kullandı ( sistemd tarafından değiştirilene kadar) upstart.ubuntu.com ve Debian'ı birkaç yıl boyunca
sysvinit'ten

5

Eski servicekomutu servicectlonun yerine [sic] çağıran bir sarmalayıcıyla değiştirmek mantıklı değil mi?

Evet, ancak […] bir paketleyici işleyebilir ve sistemd'e geçişi kullanıcılar için daha sorunsuz hale getirir.

… Yani, yorumlarda söylediği gibi, o zamandan beri neler yapıldı .

/usr/sbin/serviceDebian 8 komut sysvinit-utils paketinin bir parçasıdır. Orijinal sysvinit kaynak paketine Debian'a özgü RedHat kaynaklı bir eklentidir ve komut dosyasını okurken görüldüğü gibi hem sistemd çalışmasını hem de uptart işlerinin varlığını tanıyarak systemctlve initctl( takma adları aracılığıyla). Bu 2013'ten beri yapıyor.

service name actionLinux olmayan işletim sistemlerinde bile oldukça yaygındır. BSD'lerin çoğunda bile çalışacak, çünkü kendi servicekomutları da var . Ayrıca servicenosh paketinde çeviri yapan bir shim komutu da vardır . Fakat …system-control action name

  • … Bu ortak alt kümenin ötesine geçin ve her yerde çok daha az uyumluluk vardır.
  • … OpenBSD'nin servicekomutu yoktur .
  • … BSD servicekomutları, sistem yöneticilerinin onlarca yıldır savaş hikayeleri anlattığı uzun zamandır bilinen sorunlara sahip.

Hizmetlerin etkinleştirilmesi ve devre dışı bırakılması da benzer bir durumdur. SuSE rağmen chkconfigortak bir asgari var, - (Debian ve Ubuntu için paketlenmiş mevcuttur) programı Fedora bir çok farklıdır (tek tek yorumlanır, derlenmiş bile, tamamen farklı programlama dillerinde yazılmış olan) sözdizimi ile, eylem olma veya . Fakat …chkconfig name actiononoff

  • … Yine, bu ortak altkümenin ötesinde daha az uyumluluk vardır.
  • chkconfigBSD'lerde hayır var , çünkü bunun için geleneksel araçlar ya sysrcdaha yeni OpenBSD rcctl enableve rcctl disable. Orada chkconfigve rcctlnosh pakette şim çevirmek olduğunu ve .system-control enable namesystem-control disable name
  • ... sadece Fedora chkconfigsystemd bilir ve bir için takozun görevi görür systemctl enableve systemctl disable. SuSE'nin chkconfigsistemd hakkında bilgisi yoktur.

daha fazla okuma


2

Linux'ta hizmetleri başlatmanın ve durdurmanın standart bir yolu yoktur.

beni bu kıyamet değişikliklerinden kurtarabilecek bir şey var mı?

Yapılandırma yönetimi / düzenleme aracını deneyin: Ansible , Chef , Saltstack , Kukla veya başka bir şey.

Ansible ile bir hizmeti başlatabilir ve etkinleştirebilirsiniz:

ansible all -i inv -m service -a 'name=service-name state=started enabled=true'

Bir göz atın LinuxService sınıfında yanıtlayıcı 'adlı yılında servicemodülü:

Bu Linux Hizmeti manipülasyon sınıfı - şu anda önyüklemede başlatılan hizmetleri kontrol etmek ve mevcut durumu kontrol etmek için ikili ve init komut dosyalarının bir karışımını destekliyor.


Her nasılsa Ubuntu'lu kişiler sistemd'e geçtikten sonra servis betiğini çalıştırabildiler. İçine bakmak doğru arka ucu kullanmak için yeterince akıllı görünüyor. Debian için de aynı şey söylenemez.
sorin



1

Sorununuz, Debian / Ubuntu'nun systemdeskisinin yerine yenisine geçmesidir sysvinit. Biri daha iyi olduğunu sormak ve bir alev savaş başlatmak, ancak daima eski dönüş yapabilirsiniz sysvinit, kontrol bu geri gitmek istiyorum.

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.