2.5. Hvad er et "runlevel"?

Et runlevel er den tilstand, som systemet kører i. Computeren kan køre i tilstande såsom "opstarter systemet", "enkeltbrugersystem", "flerbrugersystem", "genstarter systemet" og "slukker computeren". Hvis man f.eks. vil kopiere /home-kataloget over på en større harddisk fordi ens brugere har for mange MP3-filer liggende, så er det nødvendigt at sikre, at der ikke er nogen brugere, der har filer åbne, mens man kopierer, idet der så kan opstå en fejl i kopieringen. Det kan man sikre sig ved at skifte til enkeltbruger-tilstand, der svarer lidt til fejlsikret tilstand i Windows. Når man er færdig med systemarbejdet, hopper man tilbage til "flerbrugersystem" og folk har igen adgang til computeren, og vil ikke bemærke at deres filer pludselig ligger på et andet drev.

Computeren kører en masse services for brugerne. Det kan f.eks. være netværksforbindelse (network) og forskellige netværksrelaterede services som f.eks. e-post (sendmail/routed/named/snmpd/portmap), adgang til filsystemer på andre computere (nfs), mulighed for at udskrive til printer (lpd) og lydkort (sound). Men mens Linux er ved at starte, har man ikke brug for at have adgang til printeren, så printer-servicen startes først når systemet går ind i "flerbrugersystem"-tilstanden. Når man er ved at genstarte eller slukke computeren, slukker man igen for printer-servicen.

Når computeren omstilles fra én tilstand til en anden tilstand, udføres en række scripts, der bestemmer hvilke services der skal tændes og slukkes. Hvilke scripts der kører ved skift til f.eks. runlevel 3 (flerbrugersystem uden grafisk login), bestemmes af, hvilke scripts der er placeret i kataloget /etc/rc.d/rc3.d (Corel, Debian og nu også Red Hat har tilsvarende /etc/rc3.d).


[tyge@hven ~]$ ls /etc/rc.d/rc3.d
K30mcserv  K40snmpd   K55routed  K75gated  K80random   K95nfsfs
K96pcmcia  K97network S01kerneld S30syslog S40atd      S40crond
S40portmap S50inet    S55named   S60lpd    S75keytable S80sendmail
S85sound   S99local

Disse filer svarer til services der skal startes (dem der starter med S) eller dræbes (starter med K for Kill) når systemets tilstand ændres til tilstand 3 (Flerbrugersystem). Tallet bestemmer rækkefølgen; S01kerneld startes altså før S30syslog, mens K96pcmcia-servicen dræbes efter K30mcserv. Hver fil i dette katalog er i virkeligheden et link til et script i /etc/rc.d/init.d/, og "S80sendmail" betyder i virkeligheden at "/etc/rc.d/init.d/sendmail start" udføres, hvilket starter sendmail-dæmonen op.

Det er ikke svært at finde ud af, hvilket runlevel din computer er i. Nedenfor er vist hvordan.


[root@linus /root]# /sbin/runlevel
N 3

3-tallet viser dig, at din PC er i runlevel 3. Det er muligt at skifte runlevel uden at lukke computeren ned, men N'et viser, at der intet tidligere runlevel er, dvs. computeren har været i runlevel 3, siden den blev tændt. Du skifter runlevel med kommandoen telinit. Du bør altid synkronisere dine harddiske (tømme filsystemernes buffere) inden du skifter runlevel, dvs. kør sync et par gange, lige inden du skifter runlevel med telinit.

Runlevel 3 er det mest almindelige for servere, mens grafiske arbejdsstationer og kontormaskiner typisk vil anvende runlevel 5. Skemaet nedenfor viser betydningen af de forskellige runlevels.

Tabel 2-1. Runlevels

Runlevel Betydning
0 Lukker systemet ned (shutdown -h now)
1 Enkeltbrugertilstand (eng. »single-user mode«)
2 Flerbrugertilstand typisk ret mange netværksservices startet
3 Flerbrugertilstand uden grafisk login
4 Bruges ikke
5 Flerbrugertilstand med grafisk login
6 Genstart systemet (reboot)

Som det fremgår af skemaet, er runlevel 6 det samme som at genstarte systemet. Dvs. at når systemadministratoren (root) genstarter systemet ved at bruge kommandoen reboot (genstart), skiftes der til runlevel 6.

Enkeltbrugertilstand er et meget nyttigt runlevel. Hvis det sker, at du kommer til at konfigurere et eller andet forkert en dag - ja, det vil ske på et eller andet tidspunkt! - og din PC låser under opstarten, kan du starte den op i enkeltbrugertilstand og foretage diverse rettelser.

I filen /etc/inittab angives, hvilket runlevel der er det forvalgte runlevel. Ønsker man f.eks. at maskinen starter i runlevel 5 og ikke 3, så skal man ændre linjen


id:3:initdefault:

til


id:5:initdefault:

Se også Afsnit 1.10 for detaljer om forskelle mellem de forskellige Linux-distributioner.