Administrerende Linux daemons med init scripts

Når du installerer en ny Linux server distribusjon, kan du ofte installere alle programmene virkelig du trenger for å kjøre på den maskinen ved nye installasjoner. Distribusjons leverandører presentere en " klar til å gå " distribusjon ved å levere initialisering skript for alle de tjenestene du kan kjøre. Men hva skjer hvis du bygger fra kilde, og ingen init script er levert? Hva om du er skrive
kilden og har aldri bygget en init script? Her er noen måter å takle når du står overfor denne utfordringen.

Du kan håndtere initialisering på flere forskjellige måter. Ett alternativ er å plassere kommandoer som brukes til å starte opp en daemon inn /etc/rc.d/rc.local fil. Denne metoden er svært enkel: Klipp og lim instruksjonene README gir å starte daemon, og det er din initialisering. Dessverre går denne metoden mot hva de fleste systemer er satt opp til å gjøre som standard, noe som er å bruke init skript.



Bruke rc.local metoden også styrker du å gi avkall på en viss fleksibilitet gis av init skript, eller å hacke din egen funksjonalitet inn i en wrapper oppstartsskript som kalles i rc.local. Jeg har sett dette gjort, men det er i stor grad et dobbeltarbeid.

En annen metode er å starte daemon direkte fra /etc /inittab. Mer enn noen administratorer bruke denne teknikken, men jeg kan ikke anbefale det for et miljø med flere servere (eller mer) som vedlikeholdes av flere administratorer, for et par grunner.

Reason man er konsistens. Hvis det er mulig, bør du behandle hver daemon på hver server ved hjelp av samme prosedyre. Det eneste som bør endres i kommandoene kjøres er navnet på nissen.

Den andre grunnen, som gjelder konsistens, er administrasjon i tilfelle din død. Hvis du er den eneste administrator, så dette er en Moot. Men med mindre du trenger hver administrator å kjenne detaljene i hver daemon kjører i miljøet, kjører ting ut av inittab er ikke en god idé. Administrasjon, som et mål om en systemadministrasjon gruppe, er ikke noe som en enkelt administrator kan håndtere. Manageability dekker hele gruppen som er ansvarlig for velferden til systemene og tjenestene de vedlikeholde. Selvfølgelig gode admins også dokumentere prosedyrer.

initscriptet er din venn, fordi de representerer en effektiv bruk av ressursene som er gitt til en administrator med å administrere oppstart og avslutning av demoner. Distribusjons leverandører har i stor grad standardisert på initialisering scripts som rundt å bygge sine daemon verktøy, og de har lagt mye arbeid i å gjøre administrere daemons så enkelt som mulig. Selv om du har en init-scriptless daemon, sette sammen en init skript for å bli styrt av de vanlige systemverktøy og prosedyrer er enkelt.

La oss gå over prosessen med å lage en init script. Du vil se hvor enkelt denne prosedyren er, og oppdage funksjonalitet som gjør at du revurdere hvordan du klarer daemons.

Lage din egen init script

Jeg kommer til å gjennomgå denne prosessen basert på en real-life erfaring. Jeg bruker den nylig utgitte Fedora Directory Server på produksjons Red Hat Advanced Server-maskiner. Jeg har lastet ned og installert de binære RPM-pakker og testet at det fungerer. Det neste trinnet er å sørge for at det er overkommelig på en måte som er forenlig med alt annet på systemet. Hva gjør jeg?

Jeg laget min egen init script. Det første jeg gjorde var å lete etter noe jeg kunne bruke som mal. Hvis du vet at nissen har tilsvarende krav til en annen daemon, kan du bruke init script fra at nissen som en mal. I dette tilfellet, jeg bare kopierte init script malen som følger med min Linux-distribusjon, som er i /usr /share /doc /initscript pakke /sysvinitfiles. Her er hva jeg tok fra denne filen:

 # /bin /bash ## /etc/rc.d/init.d/###### Kilde funksjon bibliotek .. /etc/init.d /functionsstart () {echo -n " Start: " touch /var /lock /undersystemer /retur} stop () {echo -n " Slå: " rm -f /var /lock /undersystemer /retur} sak " $ 1 " i starten) starte;; stopp) stoppe;; status)       ;; omstart) stoppe starte;; reload) terte) [-f /var /lock /undersystemer /] & & starte || :    sonde)       ;; *) Echo " Bruk: {start | stop | status | laste | restart [| probe] " exit 1;; esacexit $? 

Som du kan se, er alt av strukturen for en init script allerede på plass, og hvilke funksjoner og andre biter av koden du trenger er stumpet, bare venter på å fylle de blanke feltene.

Det viktigste linjen sitter på toppen av filen, så beskjedent som kan være. Det er den som kilder filen /etc/init.d/functions. Denne filen er fylt med enkle, men nyttige bash shell funksjoner som er klar til bruk i din init script. Hvis du aldri har lagt merke til denne filen, lese den! Selv om du ikke bruker ting, vil det gi deg innsikt i hvordan systemet gjør ting, og det kan forklare hvorfor noen oppstart eller nedleggelse time feil oppstår.

Her er mitt ferdige init script, som er som er i bruk på min nesten-produksjonsservere:

 # /bin /bash ## /etc/rc.d/init.d/ns-slapd# ns-slapd Dette shell script tar seg av start- og stoppe # ns-slapd (Fedora Directory Server) ## Forfatter: Brian Jones Denne e-postadressen er beskyttet mot programmer som samler. Du må aktivere Javascript for å kunne se adressen ## chkconfig: 2345 13 87 # beskrivelse: ns-slapd er Fedora Directory Service daemon. \\ # FDS kan tjene som et oppbevaringssted for (og senere, en kilde til) \\ # data for de fleste av de ressursene som er oppført i /etc/nsswitch.conf, for eksempel \\ # passwd eller gruppeoppføringer. # Kilde funksjon bibliotek .. /etc/init.d/functionsSLAPD_HOST=`hostname -a`SLAPD_DIR=/opt/fedora-ds/bin/slapd/serverPIDFILE=$SLAPD_DIR/logs/pidSTARTPIDFILE=$SLAPD_DIR/logs/startpidif [-f /Etc /sysconfig /ns-slapd]; da        . /etc /sysconfig /ns-slapdfistart () {echo -n " Starter Fedora Directory Server: " hvis [-f $ STARTPIDFILE]; deretter PID = `cat $ STARTPIDFILE` ekko ns-slapd allerede kjører: $ PID exit 2; elif [-f $ PIDFILE]; deretter PID = `cat $ PIDFILE` ekko ns-slapd allerede kjører: $ PID exit 2; andre cd $ SLAPD_DIR daemon ./ns-slapd $ ALTERNATIVER RETVAL = $? echo [$ RETVAL -eq 0] & & touch /var /lock /undersystemer /ns-slapd retur $ RETVAL fi} stop () {echo -n " Slå Fedora Directory Server: " ekko killproc ns-slapd echo rm -f /var /lock /undersystemer /ns-slapd return 0} sak " $ 1 " i starten) starte;; stopp) stoppe;; status) status ns-slapd;; omstart) stoppe starte;; *) Echo " Bruk: {start | stop | status | restart} " exit 1;; esacexit $? 

De tre funksjonene jeg bruker i mitt manus er killproc, status, og nissen. Du må være forsiktig at du vet begge hva funksjonene gjør, og hva din søknad standard oppførsel er. For eksempel, den funksjonen som forsøker å ta tak i PID av den løpende prosessen, pidofproc, forutsetter at prosessen skriver en pid fil et sted under /var /run. For alle andre nisser på mitt system, dette fungerer, og jeg har bedt om at de Directory Server folkene gjør dette også. (Akkurat nå er det pid-filer, men de er forvaltet i katalogen hierarki der daemon liv, under /opt /fedora-ds.)

Legg også merke til at dette skriptet vil arbeide med chkconfig kommando, som betegnes med linjen lese chkconfig: 2345 13 87. Etter det, bare kjøre chkconfig legge scriptname
. Dette skriptet fungerer også med tjenesten kommandoen på systemer som har det (inkludert Fedora og, tror jeg, SUSE), som er et nyttig verktøy i sysadmin arsenal. Det fungerer som en snarvei - i stedet for å skrive cd /etc/init.d; ./mydaemon status, eller /etc/init.d/mydaemon status, kan du skrive tjeneste mydaemon status fra hva din arbeids skjer for å være.

Et siste notat om dette enkle eksemplet gjelder linjen som leser. /etc /sysconfig /ns-slapd. Hvis filen finnes, vil den bli brukt til å passere argumenter til nissen når jeg starter den. Jeg har brukt denne filen for å ta standardargumenter serveren starter normalt med og sette dem i sin egen fil; dette holde admins fra å måtte redigere init skript, og lar dem lett legge til elementer i filen senere, akkurat som vi legger til ekstrautstyr til andre nisser på systemet. Min filen inneholder en enkelt linje, som lyder ALTERNATIVER = "-D /opt /fedora-ds /slapd-ldap -i /opt /fedora-DS /slapd-LDAP /logger /pid-w /opt /fedora-ds /slapd-ldap /logger /startpid ". Dette alternativet linjen blir merket til høyre inn på slutten av kommandoen som starter daemon.

Hele denne prosessen virker som det skulle ha vært lang, men det tok bare ca 30 minutter, og det inkluderer noen feilsøking knyttet til Fedora Directory Server er usedvanlig selvstendig installere struktur. Med et enkelt daemon som mer eller mindre følger reglene, bør det ikke ta deg mer enn 10 minutter på å integrere det inn i de mekanismene som brukes til å administrere tjenester på Linux server. Anmeldelser