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

Hoe kan ik zien welke services draaien bij het opstarten op Raspberry Pi? (raspbian)

Ik heb een aantal services die op boot draaien, maar ik ben eigenlijk vergeten hoe ik ze heb ingesteld! Als ik hun activiteit wil veranderen, hoe zou ik dat dan kunnen doen? Bijvoorbeeld, misschien wil ik uitschakelen dat een service start bij het opstarten of misschien wil ik hem starten met een andere methode.

Specifiek, ik heb een openvpn service die succesvol draait bij het opstarten, maar sommige tutorials zeggen dat ik de service van filesharing programma’s aan de vpn zelf moet koppelen, zodat als de vpn uitvalt, de filesharing service dat ook doet. Maar ik denk dat het automatisch opstarten van mijn vpn de zaken compliceert en dat ik het moet uitschakelen of de manier waarop het opstart moet wijzigen. Maar hoe kan ik dat controleren?

Antwoorden (3)

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

Ik ga ervan uit dat je een Raspberry hebt die raspian gebruikt, die, voor zover ik weet, nog niet is overgestapt op systemd. In dat geval is het antwoord als volgt.

EDIT: voor systemd (Jessie of later), zie onderaan.

Eerst kunt u bepalen welk systeem op dit moment draait, door middel van het commando:

sudo service --status-all

Je krijgt dan een lijst die er ongeveer zo uitziet:

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

De +‘s geven services aan die draaien, de -’s services niet draaien, de ?’s services die status niet als mogelijk commando toelaten: het zijn meestal commando’s die niet altijd hoeven te draaien, slechts af en toe.

Om terug te komen op je vraag, je moet runlevels in Linux begrijpen. Runlevels (0-6 + S) geven aan welke services gedraaid mogen/moeten worden. Een boot sequentie gaat van een initieel runlevel (gespecificeerd in /etc/inittab, in mijn Raspberry

# The default runlevel.
 id:2:initdefault:

deze regel identificeert het als 2, en gaat dan verder naar je distro standaard laatste runlevel (van 2 tot 5). Je identificeert je huidige runlevel door middel van het commando

# runlevel
 N 2

(in mijn geval, een headless server). De andere runlevels zijn (wederom uit é/etc/inittab*):

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

Single user (1) wordt vaak ook aangeduid als S.

In een normale boot, dus je begint bij 2, en loopt op tot 5. Om de services te vinden die in deze progressie gestart zijn, geef je het commando:

# 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

Dit drukt de regel af die begint met Default-Start in alle bestanden in /etc/init.d/, waar de bestanden staan die de verschillende services identificeren. De regel in kwestie identificeert het runlevel waar elke dienst gestart moet worden. Als een dienst gestart is op runlevel N, hoeft deze, als het systeem doorgaat naar N+1, niet opnieuw gestart te worden, maar als hij niet draaiend gevonden wordt, wordt hij wel gestart.

Dit geeft je een exact idee van de verschillende stadia waarin services worden gestart. Maar binnen hetzelfde runlevel definiëren de regels Required-Start en Should-Start harde en zachte afhankelijkheden voor de dienst in kwestie, _dus _ diensten die moeten draaien en moeten draaien voor de dienst die wordt onderzocht. Zonder de Required-Start services zal de service in kwestie falen, zonder de Should-Start services in plaats daarvan zal er geen algehele mislukking zijn, mogelijk alleen het ontbreken van enkele nuttige functies. Hetzelfde gebeurt bij stoppen met Required-Stop en Should-Stop.

SYSTEMD :

Het commando om alle services op te sommen is

systemctl list-unit-files

wat veel info zal spugen. Om alle services enabled te selecteren, _d.w.z. degene die bij het opstarten worden gestart, hoeft u alleen maar het bovenstaande commando als volgt te grep'en:

systemctl list-unit-files | grep enabled

Ik geef de voorkeur aan dit commando boven systemctl list-units: het verschil is dat dit commando alleen services weergeeft die je OS in het geheugen heeft (het OS denkt dat het die nodig heeft), terwijl systemctl list-unit-files alle geïnstalleerde services weergeeft, inclusief die services die gemaskeerd zijn (d.w.z. die nooit mogen worden gestart, zelfs niet handmatig), en die services die het niet zal activeren, die statisch worden genoemd. Met andere woorden, het commando dat ik voorstelde is uitgebreider dan het commando dat alleen actieve services opsomt.

NB : systemd is heel anders dan vorige init systemen. In het bijzonder heeft het geen runlevels, maar targets. runlevels bestaan nog steeds om compatibiliteitsredenen, en kunnen worden gezien als specifieke targets door alle beschikbare targets op te sommen via

systemctl list-unit-files --type=target

terwijl je je huidige target kunt zien door middel van

$ systemctl get-default
  graphical.target

Voor meer hierover, kun je DigitalOcean’s uitstekende introductiepagina lezen.

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

Voor eenvoudig opstartservicebeheer op Raspberry Pi raad ik tool rcconf aan. Hiermee kunt u eenvoudig services in- en uitschakelen in /etc/init.d/. U kunt ook zien of ze zijn ingeschakeld en zullen draaien bij het opstarten.

Om de tool te installeren

sudo apt-get install rcconf

En is heel eenvoudig te gebruiken met tekst UI

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

Hier voeg je een batch bestand of commando’s in om bij het opstarten uit te voeren. Ik laat Openvpn ook automatisch draaien bij het opstarten :)