Upravljanje servisima alatom update-rc.d
Svaki servis kojeg instalirate na poslužitelj, osim izvršnih datoteka, sadrži i pomoćne datoteke (manual, popis promjena i slično), ali i inicijalizacijske skripte, koje nas u ovom trenutku najviše i zanimaju. Debian rabi inicijalizacijske skripte u Unix System-V stilu, a s njima je najlakše upravljati pomoću malog uslužnog programa - update-rc.d.
Ruku na srce, za postojanje ovog programa gotovo i ne morate znati, jer sve što on može, možete napraviti i ručno. Update-rc.d se rabi najviše u instalacijskim skriptama (preinst, postinst, prerm, postrm) koje se nalaze u direktoriju /var/lib/dpkg/info. Razlog zašto ga spominjemo je problem kojeg smo zaprimili na SysHelpu, gdje se jedan servis nije pokretao nakon restarta.
Ukratko, svi servisi koji se moraju pokrenuti prilikom pokretanja poslužitelja, moraju imati simbolički link na inicijalizacijsku datoteku, /etc/init.d/<servis>. Linkovi se nalaze u direktorijima /etc/rcX.d, gdje je X broj od 0-6, odnosno slovo "S". Ovi brojevi odgovaraju trenutnoj razini rada, odnosno u originalu runlevel.
Srećom, Debian ima jako pojednostavljen sustav, pa je:
0 ili N | sustav se gasi |
1 ili S | jednokorisnički način rada |
2 do 5 | višekorisnički način rada, mreža, GUI |
6 | sustav se restarta |
Simbolički linkovi na startup datoteku se nalaze u tim direktorijima, a nazivaju se ili "S" (start) ili "K" (kill), primjerice:
lrwxrwxrwx 1 root root 16 12:14 /etc/rc0.d/K20vsftpd -> ../init.d/vsftpd
lrwxrwxrwx 1 root root 16 12:14 /etc/rc1.d/K20vsftpd -> ../init.d/vsftpd
lrwxrwxrwx 1 root root 16 12:14 /etc/rc2.d/S20vsftpd -> ../init.d/vsftpd
lrwxrwxrwx 1 root root 16 12:14 /etc/rc3.d/S20vsftpd -> ../init.d/vsftpd
lrwxrwxrwx 1 root root 16 12:14 /etc/rc4.d/S20vsftpd -> ../init.d/vsftpd
lrwxrwxrwx 1 root root 16 12:14 /etc/rc5.d/S20vsftpd -> ../init.d/vsftpd
lrwxrwxrwx 1 root root 16 12:14 /etc/rc6.d/K20vsftpd -> ../init.d/vsftpd
Dakle, vsftpd će se pokretati u runlevelima 2 do 5, a gasiti u runlevelima 0, 1 i 6. Upravo je to pretpostavljena vrijednost naredbe update-rc.d:
# grep update-rc.d /var/lib/dpkg/info/vsftpd.postinst
update-rc.d vsftpd defaults >/dev/null
Bez ikakvih opcija, update-rc.d će staviti "S" linkove u rc.d direktorije od 2 do 5, a "K" linkove u rc.d direktorije 0, 1 i 6.
Brojevi iza slova omogućavaju finu gradaciju redosljeda pokretanja servisa, pa će se servis vsftpd (S20) pokrenuti poslije web poslužitelja apache2 (S09). Ukoliko želimo da se neki servis starta prije ili poslije nekoga drugoga, update-rc.d ćemo upotrijebiti u ovom obliku:
# update-rc.d vsftpd defaults 24
Linkovi će tada imati imena S24vsftpd, odnosno K24vsftpd.
Update-rc.d prima i druge parametre, pa tako možemo osigurati da se servis A starta prije i gasi poslije servisa B:
# update-rc.d servisA defaults 80 20
# update-rc.d servisB defaults 90 10
Servis A će se tako postati S80servisA i K20servisA, pa će se startati prije servisa B (K80 < K90), ali i gasiti poslije njega (K20 > K10).
Pomoću ove naredbe moguće je brzo onemogućiti neki servis:
# update-rc.d -f vsftpd remove
Removing any system startup links for /etc/init.d/vsftpd ...
/etc/rc0.d/K20vsftpd
/etc/rc1.d/K20vsftpd
/etc/rc2.d/S20vsftpd
/etc/rc3.d/S20vsftpd
/etc/rc4.d/S20vsftpd
/etc/rc5.d/S20vsftpd
/etc/rc6.d/K20vsftpd
Naravno, postoji još opcija, pa je tako moguće zasebno za svaki runlevel odrediti kada će se neki servis pokretati, odnosno gasiti. Sintaksa je sljedeća:
# update-rc.d servis start 10 2 3 4 5 . stop 90 0 1 6 .
Servis će se startati vrlo rano, a gasiti vrlo kasno, što je pogodno ukoliko se radi o nekom bazičnom servisu o kojem ovisi drugi servisi (daemoni). Obično se uzima da je vrijeme gašenja "100 minus vrijeme starta" (start 10, stop 100-10=90), ali to nije uvijek slučaj.
Ukoliko vas zanima što se kolegi koji je prijavio problem dogodilo, probajte sami zaključiti (rabio je jedan drugi alat za upravljanje):
lrwxrwxrwx 1 root root 12:05 rc0.d/K24dovecot -> ../init.d/dovecot
lrwxrwxrwx 1 root root 12:05 rc1.d/K24dovecot -> ../init.d/dovecot
lrwxrwxrwx 1 root root 12:05 rc2.d/K24dovecot -> ../init.d/dovecot
lrwxrwxrwx 1 root root 12:05 rc3.d/K24dovecot -> ../init.d/dovecot
lrwxrwxrwx 1 root root 12:05 rc4.d/K24dovecot -> ../init.d/dovecot
lrwxrwxrwx 1 root root 12:05 rc5.d/K24dovecot -> ../init.d/dovecot
lrwxrwxrwx 1 root root 12:05 rc6.d/K24dovecot -> ../init.d/dovecot
# update-rc.d -f remove dovecot
# find /etc/rc*d -name \*dovecot | xargs rm
# grep update-rc.d /var/lib/dpkg/info/dovecot-common.postinst
update-rc.d dovecot defaults 24>/dev/null
# update-rc.d dovecot defaults 24
Adding system startup for /etc/init.d/dovecot ...
/etc/rc0.d/K24dovecot -> ../init.d/dovecot
/etc/rc1.d/K24dovecot -> ../init.d/dovecot
/etc/rc6.d/K24dovecot -> ../init.d/dovecot
/etc/rc2.d/S24dovecot -> ../init.d/dovecot
/etc/rc3.d/S24dovecot -> ../init.d/dovecot
/etc/rc4.d/S24dovecot -> ../init.d/dovecot
/etc/rc5.d/S24dovecot -> ../init.d/dovecot
- Inačica za ispis
- Logirajte se za dodavanje komentara
- PDF version
Komentari
greška u sintaksi naredbe update-rc.d
U članku je pogrešno napisana naredba za onemogućavanje servisa dovecot. Ispravna naredba je:
-- rpr.