Hizmetler nasıl etkinleştirilir veya devre dışı bırakılır?


821

Ubuntu'da servislerin nasıl etkinleştirileceğini ve devre dışı bırakılacağını okudum ve onları yönetmenin farklı olasılıkları var gibi görünüyor.

Bulduğum ilk yöntem update-rc.d, /etc/init.dklasöre ve içeriğine yönelik yeni hizmetler eklemek .

Bulduğum diğeri .confise /etc/initklasördeki dosyaları düzenlemek .

Hizmetleri etkinleştirmek / devre dışı bırakmak / eklemek için önerilen yöntem nedir ve neden?

Lütfen Ubuntu'da bir servisi nasıl ekleyeceğiniz ve etkinleştirip devre dışı bırakacağınız konusunda kısa bir kurşun geçirmez adım adım verebilir misiniz?


1
Ağ kurmak için bakınız: askubuntu.com/questions/230698/…
Jorge Castro

Bu , Fedora 12'ye sıkışmış olanlar ve buraya inmiş olanlar için yararlı olacaktır. Linkrot chkconfigise aradığın şeydir.
Kanama Parmakları

3
Ubuntu 14.04'ün cevabının hala burada olmadığını unutmayın.
Reinier Post

2
@MarcelloNuccio: 15.04 Ubuntu ile başlayarak Upstart, Systemd lehine kaldırılmıştır.
Dan Dascalescu,

Otomatik başlatma programları yapılandırılmış autostartmanifestolarına veya *.serviceyanı olduğu gibi, çeşitli konumlarda dosya init.dveya crontab. Bakınız: unix.stackexchange.com/a/525845/43233
Noam Manos

Yanıtlar:


831

GUI ( startupuygulama gibi ) veya terminal kullanılarak etkinleştirilebilen / devre dışı bırakılabilen hizmetler vardır .

Terminal için birkaç seçeneğiniz var. İlk önce, bir terminal açın (örneğin, çizgi içine "terminal" yazın ve açın). Sonra:

Geçici etkinleştirme / devre dışı bırakma hizmetleri

Hizmetleri geçici olarak durdurmak ve başlatmak için (Gelecek önyükleme için bunları etkinleştirmez / devre dışı bırakmaz), yazabilirsiniz service SERVICE_NAME. Örneğin:

  • sudo service apache2 stop(Will DUR Yeniden Başlatma kadar Apache hizmetini ya da dek tekrar başlatın).

  • sudo service apache2 start(Will BAŞLANGIÇ daha önce durduruldu varsayarak Apache hizmetini.).

  • service apache2 status (Devre dışı bırakılmışsa veya devre dışı bırakılmışsa / çalıştırmıyorsa, hizmetin DURUMU'nu söyleyecektir.).

  • sudo service apache2 restart( Hizmeti yeniden BAŞLAYACAK . En sık değiştirdiğinizde, bir yapılandırma dosyası kullanılır. Bu durumda, bir PHP yapılandırmasını veya Apache yapılandırmasını değiştirdiyseniz, yeniden başlatın. Yeniden başlatma, sizi 2 komut satırıyla durdurmak / başlatmak zorunda kalmaz )

  • service apache2(Bu durumda, hizmet için yürütmek üzere EYLEM'ten bahsetmediğiniz için, söz konusu hizmet için mevcut olan tüm seçenekleri size gösterecektir.) Bu özellik, hizmete bağlı olarak değişir, örneğin, MySQL ile yalnızca bir parametre eksik. Ağ servisi gibi diğer servisler için mevcut tüm seçeneklerin küçük bir listesini belirtecektir.


systemd

15.04 Ubuntu ile başlayan Upstart, Systemd lehine kaldırılacaktır. Systemd ile hizmetleri yönetmek için aşağıdakileri yapabiliriz:

systemctl start SERVICE- Bir servisi başlatmak için kullanın. Yeniden başlattıktan sonra devam etmiyor

systemctl stop SERVICE- Bir servisi durdurmak için kullanın. Yeniden başlattıktan sonra devam etmiyor

systemctl restart SERVICE - Bir servisi yeniden başlatmak için kullanın

systemctl reload SERVICE - Servis destekliyorsa, servisi kullanan herhangi bir işlemi kesintiye uğratmadan ilgili yapılandırma dosyalarını yeniden yükler.

systemctl status SERVICE- Bir servisin durumunu gösterir. Bir servisin şu anda çalışıyor olup olmadığını söyler.

systemctl enable SERVICE- Hizmeti, bir sonraki açılışta veya bir sonraki açılış etkinliğinde açar. Yeniden başlattıktan sonra devam eder.

systemctl disable SERVICE- Bir sonraki yeniden başlatmada veya bir sonraki duraklama olayında hizmeti kapatır. Yeniden başlattıktan sonra devam eder.

systemctl is-enabled SERVICE - Bir servisin bir sonraki yeniden başlatmada başlayacak şekilde yapılandırılmış olup olmadığını kontrol edin.

systemctl is-active SERVICE - Bir servisin aktif olup olmadığını kontrol edin.

systemctl show SERVICE - Hizmetle ilgili tüm bilgileri göster.

sudo systemctl mask SERVICE- Bir servisi, bağlanarak tamamen devre dışı bırakın /dev/null; Servisi el ile başlatamaz veya servisi etkinleştiremezsiniz.

sudo systemctl unmask SERVICE- Bağlantıyı kaldırır /dev/nullve servisi etkinleştirme veya el ile başlatma özelliğini geri yükler.


UPSTART (15.04'ten beri onaylanmadı)

Resmi Upstart yolunu kullanmak istiyorsak (şu an için tüm hizmetlerin Upstart'a dönüştürülmediğini unutmayın), aşağıdaki komutları kullanabiliriz:

status SERVICE- Bu bize dönüştürülmüş bir servisin çalışıp çalışmadığını söyleyecektir. Bu lehine önerilmemektedir unutmayın start, stop, statusve restart. Ayrıca, bir hizmetin henüz start-up'a dönüştürülmemiş olup olmadığını da söyleyecektir:

Dönüştürülmüş bir servis tipik olarak mevcut durumu (Başlatma, Çalıştırma, Durdurma ...) ve işlem kimliğini gösterir. Dönüştürülmemiş bir hizmet bilinmeyen bir iş hakkında hata verir .

Bazı kısayollar, yalnızca service% 100 başlangıç ​​hizmetine dönüştürülmedikçe, yukarıdaki komutla çalışabilir, ancak aşağıdaki komutlarla çalışmayabilir:

  • BAŞLANGIÇ -sudo start mysql

  • DURDUR -sudo stop mysql

  • RESTART -sudo restart mysql

  • DURUM -sudo status smbd

Bir servisi etkinleştirme / devre dışı bırakma

Bir hizmeti kalıcı olarak başlatmak veya durdurmaktan geçmek için yapmanız gerekenler:

echo manual | sudo tee /etc/init/SERVICE.override

stanza manual, Upstart'ın bir sonraki açılışta hizmeti otomatik olarak yüklemesini durduracak. .overrideSonu olan herhangi bir servis , orijinal servis dosyasına göre öncelikli olacaktır. Servisi ancak daha sonra manuel olarak başlatabilirsiniz. Bunu istemiyorsanız, sadece silin .override. Örneğin:

echo manual | sudo tee /etc/init/mysql.override

MySQL hizmetini manualmoda geçirir. Bunu istemiyorsanız, daha sonra basitçe yapabilirsiniz

sudo rm /etc/init/mysql.override

Servisin tekrar otomatik olarak başlaması için Elbette bir servisi mümkün kılmak için en yaygın yöntem kurulumdur. Apache, Nginx, MySQL veya diğerlerini yüklerseniz, kurulum işlemini tamamladıktan sonra otomatik olarak başlarlar ve bilgisayar her başlatıldığında başlar. Devre dışı bırakılması, yukarıda belirtildiği gibi hizmetten faydalanacaktır manual.


.serviceHer komuta eklemeniz mi gerekiyor ? systemctl mongod statussadece iyi çalıştı.
Dan Dascalescu,

@DanDascalescu hayır yok ama orada açıklığa kavuşturmama izin ver.
Luis Alvarado,

4
.Override dosyasının /etc/init.d/ içine, yani hizmetin bulunduğu yere yerleştirilmesi gerekir mi?
Obi Wan - PallavJha,

Neden 15.04'te Upstart kullanımdan kaldırıldı? ubuntu 16.04 veya sonraki sürümlerinde komut dosyalarını çalıştırma / yeniden başlatma sırasında çalıştırmanın doğru yolu nedir?
Kamalakannan,

1
Bu kapsamlı cevap için teşekkürler. systemdKomutlar kümesi Ubuntu 18.04 üzerinde tedavi çalışır.
Doktor J,

355

Şu anda yazılımın Ubuntu, SysV , Upstart ve systemd'de bir servis olarak başlatılması için üç farklı yol var . Burada bir servis, sistem tarafından arka planda çalışan ve doğrudan kullanıcı tarafından başlatılana göre çalışan bir program olarak tanımlanmaktadır.

SysV

Linux'ta hizmetleri başlatmanın geleneksel yolu bir betiği yerleştirmek /etc/init.dve ardından onu etkinleştirmek veya devre dışı bırakmak için update-rc.dkomutu (veya RedHat tabanlı dağıtımlarda chkconfig) kullanmaktı.

Bu komut /etc/rc#.dbaşlangıç ​​hizmetlerinin sırasını kontrol eden sembolik çizgiler oluşturmak için biraz karmaşık bir mantık kullanır . Eğer ls /etc/rc2.dkoşarsanız, hizmetlerin bir dosya adıyla öldürülme K##xxxxve dosya adları ile başlatılma düzenini görebilirsiniz S##xxxx. ##İçinde S##xxxxhizmet için "başlangıç sırasını" anlamına gelir xxxx. Tersine, ##içinde K##xxxxservis için ölüm emri anlamına gelir xxxx.

SysV ile ilgili büyük sorunlardan biri , sistemi başlatırken, her şeyin seri olarak yapılması gerekiyordu, birbiri ardına, sistem önyükleme zamanlarını gerçekten yavaşlatıyordu . Buna paralel hale getirmek için girişimlerde bulunuldu, ancak onlar tam anlamıyla yararlanmaları için şanssız ve zordu. Upstart'ın yaratılmasının ana nedeni buydu .

sonradan görme

Upstart, /etc/initbir servisin hangi olaylarda başlaması gerektiğini tanımlamak için iş tanımı dosyalarını kullanır . Dolayısıyla, sistem önyüklenirken, starttart çeşitli olayları işler ve ardından paralel olarak birden fazla servisi başlatabilir. Bu, örneğin başka bir CPU'ya bağlı servis çalışırken veya ağ dinamik bir IP adresinin atanmasını beklerken bir disk bağlantılı servisi başlatarak sistemin kaynaklarını tam olarak kullanmalarına izin verir.

Tüm başlangıç ​​iş dosyalarını çalıştırarak görebilirsiniz. ls /etc/init/*.conf

Burada durayım ve bir hizmetin ne olduğunu ya da ne yaptığını bilmiyorsanız, devre dışı bırakmayın.

Tüm hizmetler başlangıç ​​durumuna dönüştürülmedi. Son birkaç aydır Canonical'deki sunucu ekibinde çalışırken, bir dizi dönüştürülmüş iş dosyasında çalıştım ve en güzel kısmı, birinin "sihir" komut dosyasından kurtulmasını ve sadece hizmetin nasıl başlatılacağını tanımlamak için burada ve orada birkaç komut var, başka bir şey yok. Ancak şimdilik kalamar ve samba gibi sadece bir avuç geleneksel ağ hizmeti dönüştürülmüş durumda.

Servis başlangıç ​​tabanlı mı?

Bir hizmetin start-up tabanlı olup olmadığını anlamak için status komutunu çalıştırabilirsiniz:

status servicename

Eğer bir starttart işi ise, şunu gösterecektir:

$ status statd
statd start/running, process 942

Ancak değilse, daha çok böyle bir şey göreceksiniz:

$ status apache2
status: Unknown job: apache2

Bu durumda, başlangıçapache2 durumuna dönüştürülmedi . Yani seni etkisiz hale getirmek için kaçapache2

sudo update-rc.d apache2 disable
sudo service apache2 stop

Başlangıçta hizmetleri (işleri) devre dışı bırak

Başlangıcı iş tanımları bir update-rc.dkomut yok. İşi devre dışı bırakmak için iş dosyasını doğrudan devre dışı bırakmak üzere düzenlemeniz gerekir. Bunu yapmanın iki yolu var.

Hala manuel olarak başlatabilmek istiyorsanız start ondurumu yorumlamanız gerekir . Samba yüklemek istediğinizi ama otomatik olarak başlatılmadığını söyleyin . İşte iş dosyası (natty):

description "SMB/CIFS File Server"
author      "Steve Langasek <steve.langasek@ubuntu.com>"

start on local-filesystems
stop on runlevel [!2345]

respawn

pre-start script
    RUN_MODE="daemons"

    [ -r /etc/default/samba ] && . /etc/default/samba

    [ "$RUN_MODE" = inetd ] && { stop; exit 0; }

    install -o root -g root -m 755 -d /var/run/samba
end script

exec smbd -F

Samba'yı devre dışı bırakmak #için " start on local-filesystems" önüne bir tane koyabilirsiniz . Unutmayın, açılışta geri dönmeyecek olsa da, bu kez

sudo service smbd stop

Ancak, samba'nın başlamasını asla istemiyorsanız , paketi gerçekten kaldırmanızı öneririm. Bununla birlikte, kurulmasını istiyor ancak başlatılamazsa, şunları da yapabilirsiniz:

mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled

Başlat / durdur stanza'yı kullanarak bir hizmeti devre dışı bırakın (11.04 tarihinden itibaren)

11.04 olacak sonradan görme sürümüyle başlayarak, devre dışı bırakan yeni bir anahtar kelime var start onve stop onstanzas: manual. 11.04 itibariyle hizmeti devre dışı bırakmanın başka bir yolu da:

echo 'manual' | sudo tee /etc/init/mysql.override

# command from root shell
echo manual >> /etc/init/mysql.override

overrideBir hizmeti iş tanımını düzenlemeden, sadece manualanahtar kelimeyi içine koyarak devre dışı bırakmak için dosya oluşturabilirsiniz .


20
11.04 de geçersiz kılıyor gibi görünüyor. Yani echo manual >> /etc/init/<service>.overrideo bozulmamış filke orijinal .conf ayrılırken tercih edilir. Her neyse, hala böyle bir temel etkinleştirme / devre dışı bırakmanın gelişmesi 3 yıl sürdü ve bunun için GUI yok.
MestreLion

3
update-rc.d gerçekten önemli olan şey
Timofey

2
Orijinal konuyu, asıl soru afişinin belirleyici cevabı olarak nitelendirilen cevaptan çok daha fazla ele alıyor gibi görünüyor. Teşekkürler! :)
Henning

1
Benim durumumda, dosya /etc/init/ssh.confama var status sshve status sshdher ikisi de "Bilinmeyen iş" demek. Bu cevap böyle bir olasılığı ele almıyor mu?
Brian Z

1
status sshbeni de 'Bilinmeyen işi', verir, ama service ssh statusbenim için çalışıyor
ptim

129

sysv rc-conf

Sysv-rc-conf kullanmayı deneyin

sudo apt-get install sysv-rc-conf

ve hizmetleri yönetmeye başlamak

sudo sysv-rc-conf

Bu gibi etkileşimli pencereyi açacaktır

görüntü tanımını buraya girin

Ctrl+nSonraki sayfa ve Ctrl+pönceki sayfa için sayfalar arasında daha fazla gezinebilirsiniz . SPACEİstediğiniz çalışma seviyelerini seçerek hizmetleri etkinleştirebilir veya devre dışı bırakabilirsiniz .

İşler-Yönetici

Başka bir alternatif, yükleme yoluyla Jobs-Admin olacaktır

sudo apt-get install jobs-admin

Hangi da GUI böyle sağlar

iş yöneticisi önizlemesi

Daha fazla iş göstermek için , menüsünden Korumalı İşleri Göster seçeneğini işaretlemeniz gerekir .

chkconfig

Ve üçüncü seçenek chkconfig olur ,

sudo apt-get install chkconfig

chkconfigAçık / Kapalı işlerin listesini gösteren CLI ile kullanılabilir . Ayrıca sistem hizmetlerini kullanarak da görüntüleyebiliriz.chkconfig –list

Servisler kullanılarak açılabilir

chkconfig <service> on

Hizmetler kullanılarak kapatılabilir

chkconfig <service> off

Ve kendi başlığımızı ekleyebiliriz, uygun başlıklı bir init betiği kullanarak.

chkconfig --add <service>

update-rc.d

Ve başka bir seçenek sevk edilebilir update-rc.d burada , kısaca izah burada .

Ubuntu Server 12.04 için update-rc.d chkconfig yerine kullanıldığını unutmayın.


1
ubuntu sunucuda:Package chkconfig is not available, but is referred to by another package.
pwned

Pwned Sunucu baskısı ile ilgili güncellenmiş bilgileri düzenlemekte ve göndermekte özgürsünüz. Teşekkür ederiz.
atenz

Önerdiğin gibi yaptım, şimdi meslektaş incelemesi için hazır.
pwned

jobs-admin işlerin değiştirilmesine izin vermiyor (Ubuntu 14.04), bunun yerine bir kilitlenme raporu
Sadi

5
sysv-rc-conf, start-up veya systemd ile kullanım için uygun değildir, yalnızca Ubuntu Linux'ta neredeyse on yıldan beri varsayılan olmayan eski System 5 rc sistemi için açık bir şekilde kullanılmaktadır. Debian Bug # 791689 bunu kabul ediyor ve neden systemd ile çelişkili olarak işaretlenmediğini sorguluyor.
JdeBP 17:15

48

Ubuntu'yu ssh üzerinden çalıştıranlar için bence en güzel seçenek rcconf- metin tabanlı bir program:

sudo apt-get install rcconf
sudo rcconf

alt metin

Sekme ve ok tuşlarıyla gezin, etkinleştirmek / devre dışı bırakmak için boşluk tuşuna basın. Değişiklikler yeniden başlatmalar arasında kalıcı.

Ekran görüntüsü bu blog yayınından ödünç alındı; bu da gösteriliyor sysv-rc-conf- çalışma düzeyini ayarlamanızı sağlayan benzer bir araç. (Çalışma seviyelerini önemsemek isteyenler için onları değiştirmek istemek :)

Ne yazık ki, rcconf /etc/init/*sadece geleneksel mekanizmalarla ( ls -l /etc/init.d/*- sembolik bağlar olmayanlar ) başlangıçta (listelenen hizmetler ) çalışmaz.

Neyse ki, bir sunucuya girerken ilgili olan hizmetlerin çoğu (Apache, Tomcat, mdadm, boinc-client ...) henüz başlangıç ​​seviyesine taşınmamıştır.


6
Bu hala başlangıçta çalışıyor mu?
oKtosiTe

3
Ne yazık ki hayır. Ancak değiştirmek istediğim tüm durumlar için işe yaradı - başlangıçtaki işler çoğunlukla devre dışı bırakmak istemediğim şeyler gibi görünüyor - donanım saati, günlük arka plan programı, ağ vb. (En azından Ubuntu sunucusunda). Ancak dikkat edilmesi gereken bir şey (ben değildim :), gönderiyi güncelledim.
jg-faustus

Maalesef, mysql, starttart'a dönüştürüldü. Ve bu sadece bir proje yaparken kullandığım hizmet.
MestreLion

Ubuntu 12.04'te rcconf ile programın başlamasını engelleyen bir hata var. Sorunu çözmek için iletişim paketini yüklemeniz gerekir.
Devius

1
Bu cevap yazıldığından beri update-rc.ddeğiştirildi ve kullanımdan kaldırılan işlevlerinden bazıları kaldırıldı . Debian bug # 727735, rcconf'un eşleşmeyeceğini belirtti. Ve hayır, rcconf da sistemd ile çalışmadığından, son on yılda Ubuntu Linux için varsayılan init sistemlerinden hiçbiri için geçerli değildir.
JdeBP 17:15

18

Bu GUI aracının BUM gibi bir şey olduğunu ancak Upstart ile uyumlu olduğunu öğrendim:

  • İşler-Yönetici

    sudo apt-get install jobs-admin
    

Ancak bu çok basittir ve "korunan işleri" değiştirmenize izin vermez (bu meslektaşlar nedir? Apple’ın İşleri var, işletim sisteminin
kimlikleri var

"Korunmasız işleri" (Ubuntu 14.04) değiştirmeye bile izin veremiyorum, bunun yerine bir kilitlenme raporu hazırladım ;-)
Sadi

12

Mevcut başlangıç ​​yapılandırma dosyasını (yukarıda açıklandığı şekilde) düzenlemek iyi bir fikir değildir. Güncellenmiş bir paket güncellenmiş bir yapılandırma sağlayabilir ve değişikliklerinizi tekrar tekrar yapmanız gerekebilir.

Birine bakarak man 5 initdaha uygun bir çözüm bulacaksınız: geçersiz kılma yapılandırmasını kullanarak. Kısa örnek: Diyelim ki "foobar" adında bir servisimiz var, yani /etc/init/foobar.confbaşlangıç ​​konfigürasyonuyla birlikte bir dosya olurdu . Şimdi bu dosyayı kaldırmak ya da değiştirmek istemiyorsunuz - ama bu hizmetin çalışmasını istemiyor musunuz? Yani bir koyun geçersiz kılma yanında dosyayı: /etc/init/foobar.overrideyerine (açıklama ve ile isteğe başlığı) içeren start on/ stop onçizgiler bir kelimeden oluşan bir satırı koyun: manual. Bu yolla foobar.conf, başlangıçta temel olarak kullanmasını söylersiniz , ancak bu hizmeti yalnızca el ile uygulandığında başlatmak için başlangıç ​​tanımını geçersiz kılar ( service foobar startörneğimizde aracılığıyla ).



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.