Chkconfig, skapa start-stop-script

From Linuxwiki
Jump to navigation Jump to search

Start- och stop-script för chkconfig

Denna information är för Red Hat operativsystem men kan ev. fungera på andra system med som hanterar system V. Det som visas här är vad som krävs för att chkconfig ska kunna lägga till och ta bort länkar med rätt ordningsföljd. Anvisningarna gäller inte för hantering av tjänster som startas via xinetd.

Den som inte känner till hur systemet hanterar länkar för olika runlevels bör skaffa sig den informationen då det i annat fall kan bli svårt att hänga med i denna text.

chkconfig

För att lista vilka tjänster som startas och stoppas för varje runlevel skriver man

chkconfig --list
mdmonitor      	0:off	1:off	2:on	3:on	4:on	5:on	6:off
mdmpd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off

Här kan man se att mdmonitor är igång för runlevel 2-5 och avstängd för övriga. Med avstängd menas att mdmonitor inte startas vid växling till den körnivå för vilken den är satt som off. Däremot kan det betyda att det körs ett stop-script för den runlevel där den är markerad off. Det senare avgörs av ytterligare en faktor, vilket tas upp längre ned i denna text.

Vi ser även att mdmpd inte startas alls oavsett runlevel. Därför är det bra om den inte heller stoppas (den är ju inte igång).

Förbereda scriptet

För att ett script ska kunna startas och stoppas krävs några olika saker av det.

  • Ska vara placerat i /etc/init.d
  • Ska ha vissa förutbestämda direktiv i scriptet
  • Ska skapa en fil i /var/lock/sybsys om det även måste stoppas

Det första är att placera scriptet i /etc/init.d, sätta ägarskap root och x-flaggan för root. Scriptet bör ha ett hanterbart namn samt inte sluta på .sh (enligt obekräftad uppgift).

Direktiven som gäller är att förutom tala om vilken tolk som gäller med #! (vanligen #!/bin/bash) ska man ha med ett fält # chkconfig och ett # description. Notera mellanslaget efter #. # chkconfig talar om vilka runlevels som scriptet ska vara markerat on och ordningsföljden på länken för start respektive stopp. Exempel ur mdmonitor

#!/bin/bash
# 
# mdmonitor     This starts, stops, and reloads the mdadm-based
#               software RAID monitoring and management facility
#
# chkconfig: 2345 15 85
# description: software RAID monitoring and management
# config: /etc/mdadm.conf

Här ser man att scriptet ska startas på runlevel 2-5 (2345) och ha länkordningen 15 för start (S15) samt ordningen 85 för stopp (K85). Detta utläser man alltså ur # chkconfig: 2345 15 85. I exv /etc/rc3.d ser man då

lrwxrwxrwx 1 root root 19 Mar 16 09:37 S15mdmonitor -> ../init.d/mdmonitor

och i /etc/rc6.d

lrwxrwxrwx 1 root root 19 Mar 16 00:31 K85mdmonitor -> ../init.d/mdmonitor

Förutom chkconfig måste det även finnas en beskrivning över vad scriptet gör. Detta är vad # description: soft... säger.

Fältet # config: ... är valfritt och tas inte upp här.

Notera att det ska vara kolon efter varje direktiv, det är lätt att missa det.

Programkod i scriptet

Det var direktiven det. Scriptet måste ju även göra något. Det ordnas med start- och stop-avsnitten i scriptet. När systemet anropar detta script görs det med antingen start eller stop som parameter. Därför måste man läsa av denna parameter för att köra "rätt" kod i scriptet. Det kan se ut så här

case "$1" in
  start)
    start
    kod att exekvera för start
    touch /var/lock/subsys/scriptnamn
    ;;
  stop)
    stop
    kod att exekvera för stop
    rm -f /var/lock/subsys/scriptnamn
    ;;
  *)
     echo "Usage $0 start|stop"
     ;;
esac

Vad koden ska åstadkomma får man själv skriva in. Fler parametrar än start och stop är möjliga men systemet anropar bara dessa två vid byte av runlevel. Raden touch /var/lock/subsys/scriptnamn krävs om man vill att scriptet ska anropas även för K-länkar. Finns det ingen fil med samma namn som scriptet heter i init.d under /var/lock/subsys kommer scriptet inte att anropas vid exv omstart av servern. Likaså ser kommandot rm -f /var/lock/subsys/scriptnamn till att ta bort den filen för att nedstängning inte ska ske flera gånger efter varandra utan uppstart emellan.

Aktivera

När allt är klart kan man testa om chkconfig accepterar ens script med

chkconfig --add scriptnamn

Detta ska då skapa start- och stop-länkar under respektive rcX.d-katalog. Felmeddelande betyder oftast att man gjort fel vid parametrarna för chkconfig: eller liknande. Någon syntax av själva kommandona i scriptet görs inte.

Vill man ta bort länkarna skriver man

chkconfig --del scriptnamn

För att se resultatet

chkconfig --list | grep scriptnamn

/var/lock/subsys

Här håller systemet reda på vilka tjänster som startats och vars motsvarande K-länk ska anropas vid nedstängning. Finns här en fil (innehållet spelar ingen roll - bör vara tom) med samma namn som scriptet kommer motsvarande K-länk att anropas om man byter runlevel till en där tjänsten ska vara avstängd. I annat fall ignoreras K-länken.