Come abilitare o disabilitare i servizi?


820

Ho letto su come abilitare e disabilitare i servizi in Ubuntu e sembra che ci siano diverse possibilità per gestirli.

Il primo metodo che ho trovato è update-rc.dquello di aggiungere nuovi servizi all'avvio, che mira alla /etc/init.dcartella e al suo contenuto.

L'altro che ho trovato è quello di modificare i .conffile nella /etc/initcartella.

Qual è il modo consigliato per abilitare / disabilitare / aggiungere servizi e perché?

Potresti fornire un breve esempio passo-passo a prova di proiettile su come aggiungere un servizio in Ubuntu e abilitarlo e disabilitarlo?


1
Per il collegamento in rete, consultare: askubuntu.com/questions/230698/…
Jorge Castro,

Questo sarebbe utile per quelli bloccati su Fedora 12 e sono atterrati qui. Nel caso in cui linkrot chkconfigsia ciò che stai cercando.
Bleeding Fingers,

3
Nota che qui manca ancora la risposta per Ubuntu 14.04.
Reinier Post,

2
@MarcelloNuccio: a partire da Ubuntu 15.04, Upstart è stato deprecato a favore di Systemd.
Dan Dascalescu,

I programmi di avvio automatico sono configurati in autostartmanifesti o in *.servicefile in diverse posizioni, nonché in init.do crontab. Vedi: unix.stackexchange.com/a/525845/43233
Noam Manos

Risposte:


831

Ci sono servizi che possono essere abilitati / disabilitati usando la GUI (come l' startupapplicazione) o il terminale.

Per il terminale hai diverse opzioni. Innanzitutto, apri un terminale (digita "terminale" nel trattino, ad esempio, e aprilo). Poi:

Abilitazione / disabilitazione temporanea dei servizi

Per interrompere e avviare temporaneamente i servizi (non li abilita / disabilita per gli avvii futuri), è possibile digitare service SERVICE_NAME. Per esempio:

  • sudo service apache2 stop( Arresterà il servizio Apache fino al riavvio o fino a quando non verrà riavviato).

  • sudo service apache2 start( Avvia il servizio Apache supponendo che sia stato interrotto prima.).

  • service apache2 status (Indica lo STATO del servizio, se è abilitato / in esecuzione su disabilitato / NON in esecuzione.).

  • sudo service apache2 restart( Riavvia il servizio. Questo è più comunemente usato quando hai cambiato, un file di configurazione. In questo caso, se hai cambiato una configurazione PHP o una configurazione Apache. Il riavvio ti salverà dal dover interrompere / iniziare con 2 righe di comando )

  • service apache2(In questo caso, poiché non hai menzionato l'AZIONE da eseguire per il servizio, ti mostrerà tutte le opzioni disponibili per quel servizio specifico.) Questo aspetto varia a seconda del servizio, ad esempio con MySQL menzionerebbe solo che manca un parametro. Per altri servizi come il servizio di rete menzionerebbe il piccolo elenco di tutte le opzioni disponibili.


systemd

A partire da Ubuntu 15.04, Upstart sarà deprecato a favore di Systemd. Con Systemd per gestire i servizi possiamo fare quanto segue:

systemctl start SERVICE- Usalo per avviare un servizio. Non persiste dopo il riavvio

systemctl stop SERVICE- Usalo per interrompere un servizio. Non persiste dopo il riavvio

systemctl restart SERVICE - Usalo per riavviare un servizio

systemctl reload SERVICE - Se il servizio lo supporta, ricaricherà i file di configurazione ad esso correlati senza interrompere alcun processo che utilizza il servizio.

systemctl status SERVICE- Mostra lo stato di un servizio. Indica se un servizio è attualmente in esecuzione.

systemctl enable SERVICE- Attiva il servizio, al successivo riavvio o al prossimo evento di avvio. Persiste dopo il riavvio.

systemctl disable SERVICE- Disattiva il servizio al successivo riavvio o al prossimo evento di arresto. Persiste dopo il riavvio.

systemctl is-enabled SERVICE - Controllare se un servizio è attualmente configurato per l'avvio o meno al riavvio successivo.

systemctl is-active SERVICE - Controlla se un servizio è attualmente attivo.

systemctl show SERVICE - Mostra tutte le informazioni sul servizio.

sudo systemctl mask SERVICE- Disabilitare completamente un servizio collegandolo a /dev/null; non è possibile avviare il servizio manualmente o abilitare il servizio.

sudo systemctl unmask SERVICE- Rimuove il collegamento /dev/nulle ripristina la possibilità di abilitare e / o avviare manualmente il servizio.


UPSTART (obsoleto dal 15.04)

Se vogliamo usare il modo ufficiale Upstart (Nota che, per il momento, non tutti i servizi sono stati convertiti in Upstart), potremmo usare i seguenti comandi:

status SERVICE- Questo ci dirà se un servizio convertito è in esecuzione o meno. Si noti che questo è deprecato in favore di start, stop, statuse restart. Ci dirà anche se un servizio non è stato ancora convertito in start-up:

Un servizio convertito in genere emette lo stato corrente (avvio, esecuzione, arresto ...) e l'ID processo. Un servizio non convertito darebbe un errore su un lavoro sconosciuto .

Alcune scorciatoie possono funzionare solo con il servicecomando sopra ma non con i comandi sotto a meno che non siano convertite al 100% in servizi di avvio:

  • INIZIO -sudo start mysql

  • STOP -sudo stop mysql

  • RIAVVIA -sudo restart mysql

  • STATUS -sudo status smbd

Abilitazione / disabilitazione di un servizio

Per attivare o disattivare definitivamente un servizio, è necessario:

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

dove la stanza manualimpedirà a Upstart di caricare automaticamente il servizio al prossimo avvio. Qualsiasi servizio con la .overridefine avrà la precedenza sul file di servizio originale. Successivamente potrai avviare il servizio manualmente. Se non lo desideri, elimina semplicemente il file .override. Per esempio:

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

Metterà il servizio MySQL in manualmodalità. Se non lo vuoi, dopo puoi semplicemente farlo

sudo rm /etc/init/mysql.override

e Riavvia per riavviare automaticamente il servizio. Naturalmente per abilitare un servizio, il modo più comune è installarlo. Se installi Apache, Nginx, MySQL o altri, si avvieranno automaticamente al termine dell'installazione e si avvieranno ogni volta che il computer si avvia. La disabilitazione, come menzionato sopra, farà uso del servizio manual.


Devi aggiungere .servicead ogni comando? systemctl mongod statusha funzionato bene.
Dan Dascalescu,

@DanDascalescu no, ma fammi chiarire lì.
Luis Alvarado,

4
Il file .override deve essere inserito in /etc/init.d/, ovvero dove si trova il servizio?
Obi Wan - PallavJha,

Perché Upstart è obsoleto in 15.04? qual è il modo giusto per eseguire script all'avvio / riavvio in Ubuntu 16.04 o successivo?
Kamalakannan J,

1
Grazie per questa risposta esaustiva. L' systemdinsieme di comandi funziona a meraviglia su Ubuntu 18.04.
Doktor J,

354

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.de quindi utilizzare il update-rc.dcomando (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.dpuoi vedere l'ordine in cui i servizi verranno eliminati con un nome file simile K##xxxxe avviato con nomi file S##xxxx. L' ##in S##xxxxsignifica un "ordine di partenza" per il servizio xxxx. Al contrario, ##in K##xxxxsignifica 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/initper 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, apache2non è stato convertito in start - up . Quindi, per disabilitarti apache2basta 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.dcomando. 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 oncondizione. 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 one stop onstrofe: 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 overridefile per disabilitare un servizio senza modificare affatto la definizione del lavoro, inserendo semplicemente la manualparola chiave.


20
Sembra che anche l'11.04 abbia la precedenza. Quindi echo manual >> /etc/init/<service>.overrideè preferito in quanto lascia intatto il filke .conf originale. Ad ogni modo, è ancora un peccato che un'abilitazione / disabilitazione di base abbia richiesto 3 anni per svilupparsi, e non esiste una GUI per questo.
MestreLion,

3
update-rc.d è ciò che conta davvero
Timofey il

2
sembra molto più gestire l'argomento originale che la risposta che è stata contrassegnata come risposta difensiva dal poster della domanda originale. Grazie! :)
Henning

1
Nel mio caso, il file /etc/init/ssh.confesiste ma status sshed status sshdentrambi dicono "Lavoro sconosciuto". Questa risposta non sembra affrontare tale possibilità?
Brian Z,

1
status sshmi dà anche " service ssh status
Lavoro

129

sysv-rc-conf

Prova a usare sysv-rc-conf

sudo apt-get install sysv-rc-conf

e per iniziare a gestire i servizi, eseguire

sudo sysv-rc-conf

Il che farà apparire una finestra interattiva come questa

inserisci qui la descrizione dell'immagine

È possibile navigare ulteriormente tra le pagine utilizzando Ctrl+nper la pagina successiva e Ctrl+pper la pagina precedente. È possibile abilitare e disabilitare i servizi selezionando SPACEi runlevel desiderati.

Lavoro-Admin

Un altro sostituto sarebbe Jobs-Admin installando attraverso

sudo apt-get install jobs-admin

Che fornisce anche una GUI come questa

anteprima di jobs-admin

Per mostrare più lavori, devi selezionare Mostra lavori protetti dal suo menu.

chkconfig

E la terza opzione sarebbe chkconfig ,

sudo apt-get install chkconfig

Può essere utilizzato tramite l'interfaccia della riga di comando chkconfig, mostrando l'elenco dei lavori di attivazione / disattivazione. Inoltre possiamo visualizzare i servizi di sistema usandochkconfig –list

I servizi possono essere attivati ​​utilizzando

chkconfig <service> on

I servizi possono essere disattivati ​​utilizzando

chkconfig <service> off

E possiamo anche aggiungere il nostro servizio, usando uno script init appropriato con intestazioni appropriate.

chkconfig --add <service>

update-rc.d

E un'altra opzione può essere indicata qui update-rc.d , spiegata brevemente qui .

Si noti che per Ubuntu Server 12.04 update-rc.d viene utilizzato al posto di chkconfig.


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

@pwned Sei libero di modificare e pubblicare le informazioni aggiornate relative all'edizione del server. Grazie.
atenz,

Ho fatto come hai suggerito, ora è pronto per la revisione tra pari.
pwned

jobs-admin non consente di cambiare lavoro (Ubuntu 14.04), producendo invece un rapporto sugli arresti anomali ;-)
Sadi,

5
sysv-rc-conf non è adatto per l'uso con upstart o systemd, essendo brevettatamente solo per il vecchio sistema System 5 rc, che non è stato il default su Ubuntu Linux per quasi un decennio. Debian Bug # 791689 riconosce questo e si chiede perché non sia stato contrassegnato come in conflitto con systemd.
JdeBP,

48

Per quelli di noi che eseguono Ubuntu su ssh, penso che l'opzione migliore sia rcconf- un programma testuale:

sudo apt-get install rcconf
sudo rcconf

testo alternativo

Naviga con i tasti tab e freccia, premi la barra spaziatrice per abilitare / disabilitare. Le modifiche sono persistenti attraverso i riavvii.

Screenshot preso in prestito da questo post sul blog , che mostra anche sysv-rc-confuno strumento simile che ti consente anche di impostare il runlevel. (Per coloro che si preoccupano abbastanza dei runlevel di volerli cambiare :)

Sfortunatamente, rcconf non funziona con upstart (servizi elencati in /etc/init/*), solo con il meccanismo tradizionale ( ls -l /etc/init.d/*- quelli che non sono collegamenti simbolici).

Fortunatamente, molti dei servizi che sono rilevanti quando si accede a un server (Apache, Tomcat, mdadm, boinc-client ...) non sono stati ancora spostati all'inizio.


6
Funziona ancora con upstart?
oKtosiTe

3
Sfortunatamente no. Ma ha funzionato per tutti i casi che ho voluto cambiare - i lavori iniziali sembrano essere principalmente cose che non voglio mai disabilitare - orologio hardware, demone log, rete ecc. (Almeno sul server Ubuntu). Ma è qualcosa di cui essere consapevoli (non ero :), ho aggiornato il post.
jg-faustus,

Sfortunatamente mysql è stato convertito in start-up. E questo è un servizio che uso solo quando sto facendo un progetto.
MestreLion,

C'è un bug con rcconf su Ubuntu 12.04 che impedisce l'avvio del programma. Per risolvere il problema è necessario installare il pacchetto di dialogo.
devius

1
Da quando questa risposta è stata scritta, è update-rc.dstata modificata e alcune delle sue funzionalità obsolete sono state rimosse . Il bug Debian # 727735 nota che rcconf non è stato modificato in modo che corrisponda. E no, neanche rcconf non funziona con systemd, quindi non essendo applicabile a nessuno dei sistemi init predefiniti per Ubuntu Linux negli ultimi dieci anni.
JdeBP,

18

Ho scoperto che esiste questo strumento GUI, qualcosa come BUM ma compatibile con Upstart:

  • Lavoro-Admin

    sudo apt-get install jobs-admin
    

Ma è troppo semplice e non consente di modificare i "lavori protetti" (cos'è Jobbs? Apple ha Jobs, il sistema operativo ha demoni!)
Kakaz,

Non permetto nemmeno di cambiare "lavori non protetti" (Ubuntu 14.04), producendo invece un rapporto sugli arresti anomali ;-)
Sadi,

12

Modificare il file di configurazione upstart esistente (come descritto sopra) non è una buona idea. Un pacchetto aggiornato potrebbe fornire una configurazione aggiornata e avresti dovuto ripetere ripetutamente le modifiche.

Dando un'occhiata a man 5 inituno troverai una soluzione più appropriata: usare una configurazione di sostituzione. Breve esempio: supponiamo di avere un servizio chiamato "foobar", quindi ci sarebbe un file chiamato /etc/init/foobar.confcon la sua configurazione upstart. Ora non vuoi rimuovere quel file, né modificarlo, ma non vuoi che questo servizio sia eseguito? Quindi effettuare un override di file successivo ad esso: /etc/init/foobar.override, contenente (opzionalmente l'intestazione con la descrizione e) invece i start on/ stop onle linee si inserisce una linea con una sola parola: manual. In questo modo dici a upstart di usare sostanzialmente il foobar.conf, ma sovrascrivi la definizione di avvio per avviare quel servizio solo se applicato manualmente (tramite service foobar startnel nostro esempio).



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.