Attualmente ci sono tre modi diversi per avviare il software come servizio in Ubuntu, SysV , Upstart e systemd . Un servizio è definito qui come un programma eseguito dal sistema in background, al contrario di uno avviato ed eseguito direttamente dall'utente.
SysV
Il modo tradizionale di avviare i servizi in Linux era inserire uno script /etc/init.d
e quindi utilizzare il update-rc.d
comando (o nelle distribuzioni basate su RedHat chkconfig
) per abilitarlo o disabilitarlo.
Questo comando utilizza una logica leggermente complicata per creare collegamenti simbolici /etc/rc#.d
, che controllano l'ordine dei servizi di avvio. Se esegui ls /etc/rc2.d
puoi vedere l'ordine in cui i servizi verranno eliminati con un nome file simile K##xxxx
e avviato con nomi file S##xxxx
. L' ##
in S##xxxx
significa un "ordine di partenza" per il servizio xxxx
. Al contrario, ##
in K##xxxx
significa l'ordine di uccisione per il servizio xxxx
.
Un grosso problema con SysV era che quando si avviava il sistema, tutto doveva essere fatto in serie, una dopo l'altra, rendendo i tempi di avvio del sistema molto lenti . Furono fatti tentativi per parallelizzare ciò, ma erano casuali e difficili da sfruttare appieno. Questo è stato il motivo principale per cui Upstart è stato creato.
parvenu
Upstart utilizza i file di definizione lavoro /etc/init
per definire su quali eventi deve essere avviato un servizio. Quindi, mentre il sistema si avvia, upstart elabora vari eventi e quindi può avviare più servizi in parallelo. Ciò consente loro di utilizzare appieno le risorse del sistema, ad esempio avviando un servizio associato al disco mentre è in esecuzione un altro servizio associato alla CPU o mentre la rete è in attesa dell'assegnazione di un indirizzo IP dinamico.
È possibile visualizzare tutti i file di lavoro di avvio eseguendo ls /etc/init/*.conf
Vorrei solo fermarmi qui e dire che se non sai cosa sia un servizio o cosa NON lo disabiliti!
Non tutti i servizi sono stati convertiti in start-up. Mentre lavoravo nel team server di Canonical negli ultimi mesi, ho lavorato su una serie di file di lavoro convertiti e la parte più bella è che permette di sbarazzarsi di tutti gli script "magici" e inserire semplicemente un pochi comandi qua e là per definire esattamente come avviare il servizio e niente di più. Ma per ora, solo una manciata di servizi di rete tradizionali, come calamari e samba , sono stati convertiti.
Un servizio è basato su upstart?
Per capire se un servizio è basato su upstart, puoi eseguire il comando status:
status servicename
Se è un processo di avvio , mostrerà questo:
$ status statd
statd start/running, process 942
Ma se non lo è, vedrai qualcosa di più simile a questo:
$ status apache2
status: Unknown job: apache2
In questo caso, apache2
non è stato convertito in start - up . Quindi, per disabilitarti apache2
basta eseguire
sudo update-rc.d apache2 disable
sudo service apache2 stop
Disabilita i servizi (lavori) all'avvio
Le definizioni dei lavori di avvio non hanno un update-rc.d
comando. Per disabilitare il lavoro, è necessario modificare direttamente il file di lavoro per disabilitarlo. Ci sono due modi per farlo.
Se vuoi essere ancora in grado di avviarlo manualmente, devi commentare la start on
condizione. Supponi di voler installare samba , ma di non avviarlo automaticamente. Ecco il file del lavoro (in 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
Per disabilitare la samba , puoi semplicemente mettere un #
" start on local-filesystems
" davanti . Si noti che sebbene non si riavvierà all'avvio, questa volta è comunque necessario arrestarlo
sudo service smbd stop
Se, tuttavia, non vuoi mai avviare samba , suggerirei di rimuovere effettivamente il pacchetto. Se, tuttavia, lo desideri installato, ma non avviabile, puoi anche fare:
mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
Disabilita un servizio usando la stanza start / stop (a partire da 11.04)
A partire dalla versione di upstart che sarà a 11.04, c'è una nuova parola chiave che disattiva l' start on
e stop on
strofe: manual
. Quindi un altro modo per disabilitare il servizio a partire da 11.04 è quello di fare:
echo 'manual' | sudo tee /etc/init/mysql.override
# command from root shell
echo manual >> /etc/init/mysql.override
È possibile creare un override
file per disabilitare un servizio senza modificare affatto la definizione del lavoro, inserendo semplicemente la manual
parola chiave.