Ubuntu12.04: Başlangıçta bir daemon işlemi nasıl devre dışı bırakılır?


23

Normalde bir daemon işlemini başlatmak veya durdurmak için kullanıyorum service start/stopveya initctl start/stopşimdi aradığım şey, bir daemon sürecinin başlangıç ​​örneğinde başlamasını engellemek mysqld.

Şu anda neyi yapıyorum yeniden adlandırma olduğunu /etc/init/mysql.confiçin /etc/init/mysql.conf.bakancak hakkında biraz okuduktan sonra systemdben sağladığı bilmek geldi enable & disableyukarıdaki görev seçeneğini.

Yani, ubuntu 12.04 ile benzer bir şey var upstart.


Systemd kullandığını mı söylüyorsun? Fedora 17 bilgisayarımda kullanıyorum. systemctl [enable|disable|is-enabled] mysqld.service
BenjiWiebe

1
@ BenjiWiebe: Hayır Ben systemd kullanmıyorum. Upstart kullanıyorum çünkü sistemd ubuntu 12.04 / 12.10'daki varsayılan değil.
RanRag

1
oh şimdi görüyorum ... Ne düşündüğümden emin değilim.
BenjiWiebe

Yanıtlar:


26

Aşağıdaki komutu çalıştırarak hizmetleri devre dışı bırakabilirsiniz:

sudo update-rc.d -f <service name> disable

Man sayfa alıntı:

[S | 2 | 3 | 4 | 5] devre dışı bırakma seçenekleriyle çalıştırıldığında, update-rc.d, /etc/init.d/name betiği için mevcut runlevel bağlantılarını, sıra numaralarını eşit bir şekilde durdurmak için başlangıç ​​bağlantılarını yeniden adlandırarak değiştirir 100 eksi arasındaki fark orijinal sıra numarası.


2
Bunu oylamada yeterli saygınlığa sahip değilim ve bir açıklama yapmadan bunu yapmak hiç de kaba olmazdı, o zaman sadece bir yorum yaptı: @Noob sorusu, Upstart (/etc/init/*.conf configuration) kullanan Ubuntu 12.04 ile ilgilidir. dosyalar) çoğu sistemde çalışanlar için (@Noob tarafından belirtildiği gibi) öneriniz yalnızca çalışanlar için işe yararken /etc/init.d/* (eski SysV stili) komut dosyalarını kullanmaya başlayın. Düzenleme: Kayıt için warl0ck doğru cevaba sahiptir (teşekkürler!).
xolox

3
Soru, mysql'i belirli bir topikal durum olarak kullanan varsayımsal veya genel bir durumla ilgilidir. OP bu cevabın en azından kısmen farkında görünüyordu, ancak bazı faydalı paketlerin başlangıç ​​biçimine uymadığını ve onurlandırmayacağını (webmin ve yorum sırasında kaynak paketlerden pek çok kişi tarafından yapılanmış gibi) dikkate alması iyi olabilir. . Bu, bu yöntemin, warl0ck ve Mark'ın cevaplarının, bir paket yöneticisi ile kurulan varsayımsal mysql hizmetinin belirli bir noktasını ele almak için yaptığı gibi, bağlam için geçerli bir kısmi cevap olabileceği anlamına gelir.
JustinC

-F bayrağı gerekli değildir.
dannyman

20

Hizmeti devre dışı bırakmanın ve başlatmanın doğru yolu, XX.override dosyası oluşturmaktır,

echo 'manual' > /etc/init/mysqld.override

Bu şekilde, başlangıç ​​hizmeti otomatik olarak başlatılmayacak


Bu hala çalışıyor Ubuntu 12.04mu?
RSK

@RSK evet, neden denemiyorsun?
papatya

1
Denedim ve benim için işe yaramadı. Lemme tekrar dene ve seni yenileyecek.
RSK

Hayır, Ubuntu-14.04'te çalışmıyor.
Hi-Angel

1
@RSK yes, why don't you just give it a try?Galiba, bu sayfadaki her tavsiyeye göre sistemi "yeniden dene" ile yeniden başlatmak çok elverişli değil.
user907860

7

@ warl0ck doğru; bu bilgilerin Upstart belgelerinde oldukça iyi belgelendirildiğini eklemek istedi: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting

özellikle:

Upstart 1.3 ile aynı sonucu daha basit bir şekilde elde etmek için geçersiz kılma dosyalarından ve manuel stanzadan yararlanabilirsiniz [27]:

# echo "manual" >> /etc/init/myjob.override

Bunu yaparak aynı etkiyi elde edebileceğinizi unutmayın:

# echo "manual" >> /etc/init/myjob.conf

Ancak, geçersiz kılma özelliğini kullanarak, orijinal iş yapılandırma dosyasını dokunmadan bırakabileceğiniz anlamına gelir.

Orijinal davranışa geri dönmek için geçersiz kılma dosyasını silin veya yeniden adlandırın (veya el ile stanza'yı ".conf" dosyanızdan kaldırın).


5

Buna yardımcı olacak güzel bir yazılım parçası da var. Onun adı rcconf.

Sadece kullanarak indirin:

sudo apt-get install rcconf

ve komutuyla kullanın

rcconf

Hizmetleri devre dışı bırakmak / etkinleştirmek için hoş bir (komut satırı) arayüzü elde edersiniz.


Bu sisteme dahil değildir, bu yüzden daha iyi cevap olmazsa daha çok şey yükleyin.
m3nda

ama gerçekten yararlı: D
Magico

1

İçin yönünü belirlemesine deneyin /etc/rc2.dve ne isterseniz adlandırmak değil başlangıçta çalışmasını: "K" içine (başlangıç, sermaye) "S" değiştirmek (örneğin S02mysqlüzere K02mysql). Fikrini değiştirirsen, tersine çevir. Bence 2 runlevel'i ifade ediyor, hangi durumda 2 varsayılan, multiuser runlevel. Muhtemelen günlük bilgisayar kullanımı için gereken şeylerin çoğunu burada bulabilirsiniz.

Düzenleme : Aşağıdaki James O'Gorman'ın yorumlarını okuyun.


1
Evet '2' çalışma seviyesini gösterir. Mevcut çalışma seviyenizi who -rveya tuşunu kullanarak kontrol edebilirsiniz runlevel.
RanRag

Bu doğru who --runlevel.
Emanuel Berg

1
Bu istediğinizi elde etmesine rağmen, teknik olarak yapılacak yanlış şey. SysV init terimlerinde 'S' komut dosyaları başlangıç ​​komut dosyalarıdır ve 'K' kill komut dosyasıdır - yani S başlangıçta sırayla çalıştırılır ve K kapatma sırasında sırayla çalıştırılır (veya daha düşük bir çalışma seviyesine değiştirilir).
James O'Gorman

@ JamesO'Gorman: İlginç, ben Debian'ım, "K komut dosyalarımın" kapanmakta olduğunu mu söylüyorsunuz? Senaryoyu tamamen devre dışı bırakmak için kullanılabilecek herhangi bir tehlike olmadan kullanılabilecek bir mektup var mı? (Bunları aynı klasörde tutmak biraz pratiktir, istediğiniz yerde yeni bir durum ortaya çıkarsa.)
Emanuel Berg

@EmanuelBerg Evet, initkapanışta 'KXXscript stop' çalışıyor. Sembolik bağlantıyı silmeli veya execute bit'i gerçek init betiğinden çıkarmalısınız. Debian'ın update-rc.dbunu yönetmek için kullandığını düşünüyorum . RHEL (ve türevleri) kullanımı chkconfig.
James O'Gorman

0

Upstart ile servis yapılandırması dosyalarda bulunur /etc/init/. Örneğin, ssh bir config dosyası kullanılarak kontrol edilir/etc/init/ssh.conf

Bu dosya, Upstart'ı "işi" başlatmasını isteyen "olayları" belirtir.

Bir servisin otomatik olarak başlamasını önlemek için, birkaç yöntemden biri kullanılabilir:
a) service.conf dosyasını .conf ile bitmeyecek şekilde yeniden adlandırın
b) service.conf dosyasındaki "start on" satırını yorumlayın.

Upstart'ın daha yeni sürümlerinde (en azından v1.3'ten beri) bir service.override dosyası kullanarak başlatmayı geçersiz kılabilirsiniz, böylece şunları kullanabilirsiniz:
# echo manual > /etc/init/service.override

Son olarak, "manual" anahtar kelimesini hizmetin yapılandırma dosyasının sonuna da ekleyebilirsiniz, örneğin:
# echo manual >> /etc/init/service.conf

Bunun çalışan servisi "durdurmadığını", sadece otomatik olarak başlamasını engellediğini unutmayın. "Manuel" başlatma için ayarlanmışken servisi initctl kullanarak kontrol edersiniz, örneğin SSH servisini durdurmak ve başlatmak için:
# initctl stop ssh
# initctl start ssh

Muhtemelen Upstart için en iyi dokümantasyon http://upstart.ubuntu.com/cookbook/ adresindedir.

11.44 Bölümünde, bir hizmetin otomatik başlatılmasının engellenmesi yer almaktadır, burada: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting


0

Bunu söylemeliyim ki

echo "manual" >> /etc/init/myjob.override

biraz yanıltıcıdır, çünkü geçersiz kılma dosyasını ekle anlamına gelir. Bunu 14.04'te ağ yöneticisi ile test ettim ve aşağıdakiler işe yaramadı

vim /etc/init/network-manager.override:
start
manual

Ancak bu çalıştı

vim /etc/init/network-manager.override:
#start
manual

Yani, IMO, initctl ilk uncommented satırı arar ve çalıştırır. Belki yanılıyorum ama bunlar benim test sonuçlarımdı. Girişler açıktır.

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.