Come funzionano i servizi in Debian e come posso gestirli?


79

In Windows ho il gestore dei servizi, dove vedo tutti i servizi di sistema, che può essere avviato tramite Windows stesso, ho impostato l'utente che utilizza, la gestione dei diritti è lì e posso passare variabili e alcune altre informazioni ai servizi , Posso nominarli e posso creare servizi duplicati di un programma e così via. Quindi ho uno strumento di gestione principale in Windows.

Come posso fare lo stesso in Linux? Come posso attivare l'esecuzione di "svnserve" all'avvio o come posso configurare i servizi per essere eseguiti in un contesto speciale. Come posso visualizzare tutti i servizi "programmati"?


9
Quale distribuzione e versione stai usando? La gestione dei servizi (i servizi sono quasi sempre chiamati 'daemon' nel mondo Unix) era una volta semplice e semi-standard. Le cose sono più varie in questi giorni. E non sempre bello. :) Inoltre, cosa intendi per contesto ?
Alessio,

Anche se sembra che systemd stia lentamente vincendo la guerra del sistema init. Debian è l'ultimo grande holdout che utilizza ancora il vecchio SysVinit ed è attualmente in procinto di determinare con quale sistema di inizializzazione andare.
Patrick,

1
Attualmente lavoro con Debian (ultima versione stabile), e per contesto intendo variabili di percorso o un contesto utente specificato.
Erdinc Ay,

1
Se hai solo bisogno di usare il servercomando su Debian, vedi unix.stackexchange.com/q/226089/130402
Peter Krauss,

Risposte:


124

Attualmente ci sono 3 principali sistemi di init utilizzati da Linux. Alcuni anni fa, ce n'era solo uno, SysVinit. Ma SysVinit era gravemente carente di funzionalità come la rappresentazione grafica delle dipendenze del servizio, quindi ormai è stato deprecato nella maggior parte delle distribuzioni. Attualmente la maggior parte delle distro sta passando a systemd . Anche se c'è anche l' inizio .

Ma ecco la risposta alla tua domanda per ciascuno dei 3 sistemi init:

 

SysVinit

SysVinit attualmente utilizzato da Debian e RedHat. Sebbene la prossima versione di RedHat (7) utilizzerà systemd.

Il modo universale di abilitare i servizi SysVinit all'avvio è di collegarli simbolicamente in /etc/rc3.d(o /etc/rc2.d). Tutti i servizi sono disponibili in /etc/init.d. Si noti tuttavia che le distro avranno spesso un proprio strumento per la gestione di questi file e che invece dovrebbe essere utilizzato. (Fedora / RedHat ha servicee chkconfig, ubuntu ha update-rc.d)

Elenco servizi:

ls /etc/init.d/

Inizia il servizio:

/etc/init.d/{SERVICENAME} start

o

service {SERVICENAME} start

Interrompere il servizio:

/etc/init.d/{SERVICENAME} stop

o

service {SERVICENAME} stop

Abilita servizio:

cd /etc/rc3.d
ln -s ../init.d/{SERVICENAME} S95{SERVICENAME}

( S95viene usato per specificare l'ordine. S01 inizierà prima di S02, ecc.)

Disabilita il servizio:

rm /etc/rc3.d/*{SERVICENAME}

 

systemd

La distribuzione più notevole che utilizza systemd è Fedora. Sebbene sia usato da molti altri. Inoltre, con Debian che ha scelto di iniziare con systemd all'inizio, diventerà il sistema defacto upstart per la maggior parte delle distribuzioni (Ubuntu ha già annunciato che lascerà l'avvio per systemd).

Elenco servizi:

systemctl list-unit-files

Inizia il servizio:

systemctl start {SERVICENAME}

Interrompere il servizio:

systemctl stop {SERVICENAME}

Abilita servizio:

systemctl enable {SERVICENAME}

Disabilita il servizio:

systemctl disable {SERVICENAME}

 

parvenu

Upstart è stato sviluppato dalla gente di Ubuntu. Ma dopo che Debian ha deciso di andare con systemd , Ubuntu ha annunciato che sarebbe ricominciato .

Anche Upstart è stato usato brevemente da RedHat, poiché è presente in RHEL-6, ma non è comunemente usato.

Elenco servizi:

initctl list

Inizia il servizio:

initctl start {SERVICENAME}

Interrompere il servizio:

initctl stop {SERVICENAME}

Abilita servizio:

2 modi sfortunatamente:

  1. Ci sarà un file /etc/default/{SERVICENAME}che contiene una linea ENABLED=.... Cambia questa riga in ENABLED=1.

  2. Ci sarà un file /etc/init/{SERVICENAME}.override. Assicurati che contenga start(o sia del tutto assente), no manual.

Disabilita il servizio:

echo manual > /etc/init/{SERVICENAME}.override

Nota: esiste anche il sistema di inizializzazione 'OpenRC' utilizzato da Gentoo. Attualmente Gentoo è l'unica distro che la utilizza e non viene considerata per l'uso né supportata da altre distro. Quindi non sto coprendo il suo utilizzo (anche se se l'opinione è che lo faccio, posso aggiungerlo).


OpenRC è una specie di astrazione per SysVinit. Non lo sostituisce, lo aggiunge.
Spidey,

Ottimo commento! Solo un paio di correzioni minori: RHEL 6.x (e quindi CentOS 6.xe il resto dei derivati) usa upstart, come Ubuntu (anche se la maggior parte dei servizi usa comunque gli script SysV). Inoltre, aggiungerei che "chkconfig" (RH) e "update-rc.d" (Debian) sono i modi "ufficiali" per aggiungere collegamenti alle directory rc? .D.
rsuarez,

@rsuarez buon punto sulla cosa RHEL6. Anche se non sembra molto usarlo. La maggior parte del sistema funziona ancora tramite SysVinit legacy (17 upstart, 89 SysVinit su uno dei miei sistemi RHEL6). E chkconfige update-rc.dsono menzionati. Vedi il secondo paragrafo in SysVinit :-)
Patrick,

@Patrick è d'accordo su # 1; "oops!" il # 2 :-)
rsuarez il

1
Grazie per la risposta esaustiva, ora ho il quadro generale. Attualmente sto usando Debian (ultima scuderia), qui in Europa di lingua tedesca ha i migliori consigli, ma forse proverò Redhat.
Erdinc Ay,

9

Distribuzioni diverse utilizzano meccanismi diversi per gestire i servizi. Il software per la gestione dei servizi si chiama init , dopo il nome tradizionale del primo processo (con ID processo 1) che ha il compito di avviare gli altri.

Debian usa la tradizionale variante SysVinit di init. In questo sistema, c'è una raccolta di script nella directory /etc/init(questa e l'altra posizione possono variare leggermente tra le distribuzioni che usano SysVinit). Questi script non vengono richiamati direttamente, ma tramite collegamenti simbolici nelle directory /etc/rc?.d. Sono la presenza e il nome di questi collegamenti simbolici che determinano l'avvio dei servizi. Per maggiori dettagli, leggi il capitolo su init nel Debian Reference .

Dai un'occhiata /etc/rc?.dper vedere quali servizi sono già presenti. La lettera o la cifra prima del punto è il runlevel; le voci il cui nome inizia con Svengono eseguite con l'argomento startquando si accede al runlevel e le voci il cui nome inizia con Kvengono eseguite quando si esce dal runlevel. La normale sequenza di runlevel è: S durante l'avvio (quindi /etc/rcS.d/S*vengono eseguiti), quindi 2 (così /etc/rc2.d/S*vengono eseguiti). Al momento dell'arresto, /etc/rc2.d/K*vengono eseguiti, quindi il runlevel passa a 0 (o 6 per un riavvio).

In breve, se si desidera creare uno script di avvio per un nuovo servizio:

  • Scrivi uno script di shell in /etc/init.d. Questo script deve accettare un argomento che può essere start, stop, force-reload, restart, o (opzionale) reloado status. La differenza tra reloade restartè restartequivalente a stopseguito da startmentre reloadricarica la configurazione senza arrestare nulla (se il servizio lo supporta); force-reloadfa reloadse disponibile e restartin caso contrario. Per esempi, vedere i file esistenti e Far eseguire gli script all'avvio con Debian .
  • Esegui update-rc.dper creare collegamenti simbolici per avviare e interrompere il servizio. La maggior parte dei servizi funziona nei runlevel 2, 3, 4 e 5.

Nota che per fornire l'accesso svn, potrebbe essere più semplice configurare Apache e usare il protocollo HTTP o HTTPS. Questo ha il vantaggio secondario di consentire una rapida navigazione nel repository attraverso un browser web.


2

Da uno sfondo unix tradizionale, non c'è nulla di speciale nei servizi. I servizi sono solo processi, ma con due eccezioni: non hanno bisogno di un terminale e iniziano all'avvio. il modo in cui iniziano all'avvio dipende da init (che potrebbe essere sysv init, bsd init, upstart, systemd o qualcos'altro; controlla la tua pagina man per init) e se stai usando un wrapper per l'attività o per la configurazione di init. Non c'è nulla che ti impedisca di eseguire un servizio da un terminale, infatti è comune a scopo di test.

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.