2014-12-15 02:59:25 +0000 2014-12-15 02:59:25 +0000
17
17

Come dire quali servizi vengono eseguiti all'avvio su Raspberry Pi? (raspbian)

Ho alcuni servizi che funzionano all'avvio ma ho dimenticato come li ho impostati! Se voglio cambiare la loro attività come posso farlo? Per esempio, forse voglio disabilitare un servizio dall'avvio all'avvio o forse voglio avviarlo usando un metodo diverso.

In particolare, ho un servizio openvpn che viene eseguito con successo all'avvio, ma alcuni tutorial dicono che dovrei legare il servizio dei programmi di filesharing alla vpn stessa, in modo che se la vpn va giù, lo fa anche il servizio di filesharing. Ma penso che forse l'esecuzione automatica della mia vpn stia complicando le cose e dovrei disabilitarla o modificare il modo in cui si avvia. Ma come controllare?

Risposte (3)

23
23
23
2014-12-16 14:49:09 +0000

Presumo che tu abbia un Raspberry che usa raspian, che, per quanto ne so, non è ancora passato a systemd. In questo caso, la risposta è la seguente.

EDIT: per systemd (Jessie o successivo), vedi in fondo.

Per prima cosa, potete determinare quale sistema è attualmente in esecuzione per mezzo del comando:

sudo service --status-all

Otterrete una lista più o meno come questa:

[+] triggerhappy
  [+] udev
  [?] udev-mtab
  [?] umountfs
  [?] umountnfs.sh
  [?] umountroot
  [-] urandom
  [+] vsftpd
  [+] weewx
  [-] x11-common

I +‘s indicano servizi in esecuzione, i -’s servizi non in esecuzione, i ?’s servizi che non permettono status come possibile comando: sono per lo più comandi che non devono essere eseguiti sempre, solo occasionalmente.

Per tornare alla tua domanda, devi capire runlevels in Linux. I runlevel (0-6 + S) identificano quali servizi possono/devono essere eseguiti. Una sequenza di avvio progredisce da un runlevel iniziale (specificato in /etc/inittab, nel mio Raspberry

# The default runlevel.
 id:2:initdefault:

questa linea lo identifica come 2, e poi progredisce al runlevel finale standard della tua distro (da 2 a 5). Identificate il vostro runlevel attuale con il comando

# runlevel
 N 2

(nel mio caso, un server headless). Gli altri runlevel sono (sempre da é/etc/inittab*):

# Runlevel 0 is halt.
 # Runlevel 1 is single-user.
 # Runlevels 2-5 are multi-user.
 # Runlevel 6 is reboot.

Single user (1) è spesso identificato anche come S.

In un avvio normale, quindi si parte da 2, e si avanza fino a 5. Per trovare i servizi avviati in questa progressione, date il comando

# grep -nrI Default-Start /etc/init.d
 umountroot:7:# Default-Start:
 checkroot.sh:8:# Default-Start: S
 kbd:6:# Default-Start: S
 isc-dhcp-server:11:# Default-Start: 2 3 4 5
 mountkernfs.sh:7:# Default-Start: S
 hostname.sh:7:# Default-Start: S
 mountnfs.sh:7:# Default-Start: S
 halt:6:# Default-Start:
 dphys-swapfile:20:# Default-Start: 2 3 4 5
 bootlogs:7:# Default-Start: 1 2 3 4 5
 rc.local:6:# Default-Start: 2 3 4 5
 hostapd:9:# Default-Start: 2 3 4 5
 keyboard-setup:8:# Default-Start: S
 lightdm:7:# Default-Start: 2 3 4 5
 procps:11:# Default-Start: S
 mysql:9:# Default-Start: 2 3 4 5
 single:6:# Default-Start: 1
 vsftpd:7:# Default-Start: 2 3 4 5
 samba:7:# Default-Start: 2 3 4 5
 mountall.sh:6:# Default-Start: S
 weewx:20:# Default-Start: 2 3 4 5
 umountnfs.sh:7:# Default-Start:
 triggerhappy:6:# Default-Start: 2 3 4 5
 ifplugd:24:# Default-Start: 2 3 4 5
 alsa-utils:9:# Default-Start: S
 bootmisc.sh:7:# Default-Start: S
 sendsigs:6:# Default-Start:
 console-setup:7:# Default-Start: S
 nfs-common:7:# Default-Start: 2 3 4 5 S
 checkroot-bootclean.sh:6:# Default-Start: S
 rsyslog:7:# Default-Start: 2 3 4 5
 x11-common:7:# Default-Start: S
 mountdevsubfs.sh:7:# Default-Start: S
 cron:10:# Default-Start: 2 3 4 5
 mountnfs-bootclean.sh:6:# Default-Start: S
 mountall-bootclean.sh:6:# Default-Start: S
 screen-cleanup:11:# Default-Start: S
 udev:6:# Default-Start: S
 ssh:7:# Default-Start: 2 3 4 5
 haveged:8:# Default-Start: 2 3 4 5
 hwclock.sh:26:# Default-Start: S
 plymouth:9:# Default-Start: 2 3 4 5
 motd:7:# Default-Start: 1 2 3 4 5
 killprocs:6:# Default-Start: 1
 networking:6:# Default-Start: S
 fake-hwclock:9:# Default-Start: S
 udev-mtab:6:# Default-Start: S
 apache2:6:# Default-Start: 2 3 4 5
 reboot:6:# Default-Start:
 umountfs:6:# Default-Start:
 plymouth-log:9:# Default-Start: S
 openvpn:11:# Default-Start: 2 3 4 5
 kmod:8:# Default-Start: S
 ntp:7:# Default-Start: 2 3 4 5
 rpcbind:9:# Default-Start: S 2 3 4 5
 urandom:6:# Default-Start: S
 rmnologin:6:# Default-Start: 2 3 4 5
 checkfs.sh:7:# Default-Start: S
 sudo:8:# Default-Start: 2 3 4 5
 mtab.sh:6:# Default-Start: S
 dbus:6:# Default-Start: 2 3 4 5
 rsync:8:# Default-Start: 2 3 4 5

Questo stampa la linea che inizia con Default-Start in tutti i file in /etc/init.d/, che è dove sono tenuti i file che identificano i vari servizi. La linea in questione identifica il runlevel in cui ogni servizio deve essere avviato. Se un servizio è avviato al runlevel N, quando il sistema passa a N+1 non ha bisogno di essere avviato di nuovo, ma se si trova non in esecuzione viene avviato.

Questo vi dà un'idea esatta dei diversi stadi in cui i servizi vengono avviati. Ma all'interno dello stesso runlevel, le linee Required-Start e Should-Start definiscono le dipendenze hard e soft per il servizio in questione, i.e. servizi che devono essere avviati e dovrebbero essere avviati prima del servizio in esame. Senza i servizi Required-Start, il servizio in questione fallirà, senza i servizi Should-Start invece non ci sarà un fallimento generale, forse solo la mancanza di alcune caratteristiche utili. Lo stesso avviene allo stop con Required-Stop e Should-Stop.

SYSTEMD :

Il comando per elencare tutti i servizi è

systemctl list-unit-files

che sputerà fuori molte informazioni. Per selezionare tutti i servizi abilitati, i.e, quelli che vengono avviati all'avvio, basta unire il comando di cui sopra come segue:

systemctl list-unit-files | grep enabled

Preferisco questo comando a systemctl list-units: la differenza è che questo mostrerà solo i servizi che il vostro sistema operativo ha in memoria (il sistema operativo pensa di averne bisogno), mentre systemctl list-unit-files mostrerà tutti i servizi installati, compresi quelli che sono mascherati (i.e. quelli che non dovrebbero mai essere avviati, nemmeno manualmente), e quelli che non verranno attivati, che sono chiamati statici. In altre parole, il comando che ho suggerito è più completo di quello che elenca solo i servizi attivi.

NB : systemd è molto diverso dai precedenti sistemi di init. In particolare, non ha runlevels, ma targets. I runlevels esistono ancora per ragioni di compatibilità, e possono essere visti come obiettivi specifici elencando tutti gli obiettivi disponibili tramite

systemctl list-unit-files --type=target

mentre potete vedere il vostro obiettivo attuale tramite

$ systemctl get-default
  graphical.target

Per saperne di più, potete leggere l'eccellente pagina introduttiva di DigitalOcean .

8
8
8
2015-04-09 19:26:26 +0000

Per una semplice gestione dei servizi all'avvio su Raspberry Pi consiglio lo strumento rcconf. Ti permette di attivare/disattivare facilmente i servizi in /etc/init.d/. Puoi anche vedere se sono abilitati e verranno eseguiti all'avvio.

Per installare il tool

sudo apt-get install rcconf

Ed è molto semplice usarlo con l'UI di testo

sudo rcconf
3
3
3
2014-12-15 11:09:00 +0000
sudo nano /etc/rc.local

Qui è dove si inserisce il file batch o i comandi da eseguire all'avvio. Anch'io eseguo automaticamente Openvpn all'avvio :)