Ubuntu12.04: Jak wyłączyć proces demona podczas uruchamiania

23

Zwykle używam service start/stoplub, initctl start/stopaby uruchomić lub zatrzymać proces demona, ale teraz szukam, aby wyłączyć proces demona przed uruchomieniem na przykładzie uruchamiania mysqld.

Obecnie co robie jest zmiana nazwy /etc/init/mysql.confna /etc/init/mysql.conf.bakale po przeczytaniu trochę o systemdpoznałem, że stanowi enable & disableopcję dla powyższego zadania.

Czy jest coś podobnego w Ubuntu 12.04 z upstart.

RanRag
źródło
Mówisz, że używasz systemd? Używam go na moim komputerze Fedora 17. systemctl [enable|disable|is-enabled] mysqld.service
BenjiWiebe,
1
@BenjiWiebe: Nie, nie używam systemd. Używam upstart, ponieważ systemd nie jest domyślny w Ubuntu 12.04 / 12.10.
RanRag
1
och, rozumiem teraz ... Nie jestem pewien, co myślałem.
BenjiWiebe,

Odpowiedzi:

26

Możesz wyłączyć usługi, uruchamiając następujące polecenie:

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

Fragment strony podręcznika:

Po uruchomieniu z opcjami wyłączania [S | 2 | 3 | 4 | 5] update-rc.d modyfikuje istniejące łącza poziomu uruchamiania dla skryptu /etc/init.d/name poprzez zmianę nazw łączy początkowych, aby zatrzymać łącza o numerze sekwencji równym do różnicy 100 minus oryginalny numer kolejny.

Mark Cohen
źródło
2
Nie mam wystarczającej reputacji, by głosować na to, a robienie tego bez wyjaśnienia byłoby i tak niegrzeczne, więc wystarczy komentarz: pytanie autorstwa @Noob dotyczy Ubuntu 12.04, które używa konfiguracji Upstart (/etc/init/*.conf pliki) dla większości demonów systemowych (jak wspomniano w @Noob), podczas gdy twoja sugestia działa tylko dla demonów, zacząłem używać skryptów w /etc/init.d/* (stary styl SysV). Edycja: Dla przypomnienia warl0ck ma poprawną odpowiedź (dzięki!).
xolox
3
Pytanie dotyczy hipotetycznej lub ogólnej sytuacji, w której mysql jest szczególnym przypadkiem aktualnym. OP wydawało się przynajmniej częściowo świadome tej odpowiedzi, ale może dobrze służyć potomnym, zauważając, że niektóre przydatne pakiety nie uznają i nie będą honorować formatu upstart (np. Webmin i wiele samodzielnie zbudowanych pakietów źródłowych w czasie komentowania) . Oznacza to, że ta metoda może być poprawną odpowiedzią częściową dla kontekstu, podobnie jak warl0ck i odpowiedzi Marka na adres konkretnego punktu hipotetycznej usługi mysql zainstalowanej z menedżerem pakietów.
JustinC,
Flaga -f nie jest potrzebna.
dannyman
20

Prawidłowym sposobem wyłączenia i uruchomienia usługi jest utworzenie pliku XX.override,

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

W ten sposób usługa upstart nie uruchomi się automatycznie

stokrotka
źródło
Czy to nadal działa z Ubuntu 12.04?
RSK
@RSK tak, dlaczego nie spróbujesz?
stokrotka
1
Próbowałem i nie pracowałem dla mnie. Pozwól, że spróbuję jeszcze raz i zaktualizuję cię.
RSK
Nie, to nie działa na Ubuntu-14.04.
Cześć Anioł
1
@RSK yes, why don't you just give it a try?Podejrzewam, ponieważ bardzo niewygodne jest ponowne uruchomienie systemu za pomocą „próby” każdej porady z tej strony.
user907860
7

@ warl0ck ma rację; chciałem dodać, że ta informacja jest dość dobrze udokumentowana w dokumentacji Upstart: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting

Konkretnie:

Dzięki Upstart 1.3 możesz skorzystać z plików zastępujących i sekcji manualnej, aby osiągnąć ten sam wynik w prostszy sposób [27]:

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

Pamiętaj, że możesz osiągnąć ten sam efekt, robiąc to:

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

Jednak użycie funkcji zastępowania oznacza, że ​​możesz pozostawić oryginalny plik konfiguracji zadania nietknięty.

Aby przywrócić oryginalne zachowanie, usuń lub zmień nazwę pliku zastępowania (lub usuń sekcję instrukcji z pliku „.conf”).

Mark Glossop
źródło
5

Jest też ładne oprogramowanie, które może w tym pomóc. Nazywa się rcconf.

Wystarczy pobrać za pomocą:

sudo apt-get install rcconf

i użyj go z poleceniem

rcconf

Otrzymasz ładny (wiersz poleceń) interfejs do wyłączania / włączania usług.

delh
źródło
Nie jest to uwzględnione w systemie, więc zainstaluj więcej rzeczy, które nie będą lepszą odpowiedzią.
m3nda
ale naprawdę przydatne: D
Magico,
1

Przejdź do spróbować /etc/rc2.di zmienić to, co chcesz, nie do uruchomienia przy starcie: zmiana (początkowy kapitał), „S” do „K” (np, S02mysqldo K02mysql). Jeśli zmienisz zdanie, po prostu to odwróć. Myślę, że 2 odnosi się do poziomu pracy, w którym przypadku 2 jest domyślnym poziomem pracy dla wielu użytkowników. Prawdopodobnie właśnie tam masz większość rzeczy do codziennego użytku na komputerze.

Edycja : Przeczytaj komentarz Jamesa O'Gormana poniżej.

Emanuel Berg
źródło
1
Tak „2” odnosi się do poziomu uruchamiania. Możesz sprawdzić swój bieżący poziom uruchamiania za pomocą who -rlub runlevel.
RanRag
To prawda who --runlevel.
Emanuel Berg
1
Chociaż osiąga to, co chcesz, technicznie jest to niewłaściwe. W kategoriach inicjalizacyjnych SysV, skrypty „S” są skryptami startowymi, a „K” to skrypty zabijania - tzn. S są uruchamiane w kolejności przy uruchamianiu, a K są uruchamiane w kolejności przy wyłączaniu (lub przechodzą na niższy poziom).
James O'Gorman,
@ JamesO'Gorman: Interesujące, jestem na Debianie, czy mówisz, że moje „skrypty K” są uruchamiane podczas zamykania? Czy jest jakaś litera, która mogłaby zostać użyta do całkowitego wyłączenia skryptu, bez żadnego ryzyka? (Praktycznie jest trzymać je w tym samym folderze, gdyby pojawiła się nowa sytuacja, w której chcesz.)
Emanuel Berg,
@EmanuelBerg Tak, initpodczas zamykania uruchomi się „KXXscript stop”. Powinieneś albo usunąć dowiązanie symboliczne, albo usunąć bit wykonawczy z prawdziwego skryptu init. Wierzę, że Debian używa tego update-rc.ddo zarządzania. Zastosowanie RHEL (i pochodnych) chkconfig.
James O'Gorman,
0

W przypadku Upstart konfiguracja usługi leży w plikach /etc/init/. Na przykład ssh jest kontrolowany za pomocą pliku konfiguracyjnego/etc/init/ssh.conf

Ten plik określa „zdarzenia”, które podpowiedzą Upstart o rozpoczęciu „zadania”.

Aby zapobiec automatycznemu uruchamianiu usługi, można zastosować jedną z kilku metod:
a) Zmień nazwę pliku service.conf, aby nie kończył się na .conf
b) Skomentuj wiersz „start on” z pliku service.conf.

W nowszych wersjach upstart (przynajmniej od wersji 1.3) można również zastąpić start on-line za pomocą pliku service.override, dzięki czemu można użyć:
# echo manual > /etc/init/service.override

Na koniec możesz również dodać słowo kluczowe „manual” na końcu pliku konfiguracyjnego usługi, np. Poprzez:
# echo manual >> /etc/init/service.conf

Pamiętaj, że to nie „zatrzymuje” uruchomionej usługi, po prostu uniemożliwia jej automatyczne uruchomienie. Po ustawieniu na „ręczne” uruchamianie kontrolujesz usługę za pomocą initctl, np. Aby zatrzymać i uruchomić demona SSH:
# initctl stop ssh
# initctl start ssh

Prawdopodobnie najlepsza dokumentacja dla Upstart znajduje się na stronie http://upstart.ubuntu.com/cookbook/

Sekcja 11.44 dotyczy „wyłączania usługi z automatycznego uruchamiania, tutaj: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting

Johan
źródło
0

Cóż, muszę powiedzieć, że oświadczenie

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

jest trochę mylące, ponieważ oznacza dołączenie pliku zastępowania. Przetestowałem to 14.04 z menedżerem sieci i następujące nie działały

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

Jednak to zadziałało

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

Tak więc, IMO, initctl szuka pierwszej niezakomentowanej linii i wykonuje ją. Może się mylę, ale to były moje wyniki testu. Wejścia są mile widziane.

zaatakowany
źródło