Obecnie istnieją trzy różne sposoby uruchamiania oprogramowania jako usługi w Ubuntu, SysV , Upstart i systemd . Usługa jest tutaj definiowana jako program uruchamiany przez system w tle, w przeciwieństwie do programu uruchamianego i uruchamianego bezpośrednio przez użytkownika.
SysV
Tradycyjnym sposobem uruchamiania usług w Linuksie było umieszczenie skryptu /etc/init.d
, a następnie użycie update-rc.d
polecenia (lub w dystrybucjach opartych na RedHat chkconfig
), aby go włączyć lub wyłączyć.
To polecenie używa nieco skomplikowanej logiki do tworzenia dowiązań symbolicznych /etc/rc#.d
, które kontrolują kolejność uruchamiania usług. Jeśli uruchomisz ls /etc/rc2.d
, zobaczysz kolejność, w której usługi zostaną zabite z nazwą pliku podobną do nazw plików K##xxxx
i uruchomioną z nazwami plików S##xxxx
. ##
W S##xxxx
oznacza „porządek startowy” dla służby xxxx
. I odwrotnie, ##
in K##xxxx
oznacza rozkaz zabicia dla usługi xxxx
.
Jednym z głównych problemów z SysV było to, że podczas uruchamiania systemu wszystko musiało być wykonywane szeregowo, jedna po drugiej, dzięki czemu czasy uruchamiania systemu były naprawdę powolne . Próbowano to zrównoważyć, ale były przypadkowe i trudno było w pełni je wykorzystać. To był główny powód, dla którego stworzono Upstart .
Dorobkiewicz
Upstart używa plików definicji zadań w /etc/init
celu określenia, jakie zdarzenia powinna uruchomić usługa. Tak więc, podczas uruchamiania systemu, upstart przetwarza różne zdarzenia, a następnie może uruchomić wiele usług równolegle. Pozwala im to w pełni wykorzystać zasoby systemu, na przykład uruchamiając usługę związaną z dyskiem, gdy działa inna usługa związana z procesorem lub gdy sieć czeka na przydzielenie dynamicznego adresu IP.
Możesz zobaczyć wszystkie pliki zadań upstart, uruchamiając ls /etc/init/*.conf
Pozwól mi tylko zatrzymać się tutaj i powiedzieć, że jeśli nie wiesz, co to jest usługa lub co ona robi, NIE wyłączaj jej!
Nie wszystkie usługi zostały przekonwertowane na upstart. Pracując w zespole serwerów w Canonical przez ostatnie kilka miesięcy, pracowałem nad wieloma skonwertowanymi plikami zadań, a najmilszą częścią jest to, że pozwala pozbyć się całej „magii” skryptu i po prostu włożyć kilka poleceń tu i tam, aby dokładnie określić sposób uruchomienia usługi i nic więcej. Ale na razie tylko kilka tradycyjnych usług sieciowych, takich jak kałamarnica i samba , zostało przekonwertowanych.
Czy usługa jest oparta na upartach?
Aby dowiedzieć się, czy usługa jest oparta na wstępie, możesz uruchomić komendę status:
status servicename
Jeśli jest to praca upstart , pokaże to:
$ status statd
statd start/running, process 942
Ale jeśli nie, zobaczysz coś takiego:
$ status apache2
status: Unknown job: apache2
W tym przypadku apache2
nie został przekonwertowany na upstart . Aby wyłączyć apache2
, po prostu biegnij
sudo update-rc.d apache2 disable
sudo service apache2 stop
Wyłącz usługi (zadania) na początku
Definicje zadań wstępnych nie mają update-rc.d
polecenia. Aby wyłączyć zadanie, musisz bezpośrednio edytować plik zadania, aby go wyłączyć. Można to zrobić na dwa sposoby.
Jeśli nadal chcesz ręcznie go uruchomić, musisz skomentować ten start on
warunek. Powiedz, że chcesz zainstalować sambę , ale nie uruchamiaj jej automatycznie. Oto plik zadania (w 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
Aby wyłączyć sambę , możesz po prostu umieścić znak #
„ start on local-filesystems
”. Pamiętaj, że chociaż nie można go ponownie uruchomić przy starcie systemu, tym razem musisz go zatrzymać
sudo service smbd stop
Jeśli jednak nie chcesz nigdy uruchamiać samby , sugeruję usunięcie pakietu. Jeśli jednak chcesz go zainstalować, ale nie można go uruchomić, możesz także:
mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
Wyłącz usługę przy użyciu sekcji start / stop (od 11.04)
Począwszy od wersji nowobogackich, która będzie w 11.04, nie jest nowe słowo kluczowe, który wyłącza start on
i stop on
strofy: manual
. Tak więc innym sposobem wyłączenia usługi od 11.04 jest:
echo 'manual' | sudo tee /etc/init/mysql.override
# command from root shell
echo manual >> /etc/init/mysql.override
Możesz utworzyć override
plik, aby wyłączyć usługę bez edytowania definicji zadania, po prostu umieszczając w nim manual
słowo kluczowe.