Introducere în daemontools

După cum scrie el DJB: „daemontools - un set de instrumente pentru managementul de servicii bazate pe UNIX“ Principalele diferențe față de convenționale de start-up (structura de directoare rcx .d sau rc.local rc.d sau etc.), este capacitatea de a reporni serviciul în cazul în care este prezența incidenței și de referință și programul de rotație log (Multilog). Avantajele prima diferență și așa IMHO evident, și rotirea automată a jurnalului, printre altele, este bun, deoarece nu permite evacuare (accidental sau intenționat) spațiul liber în partiția / var / log / log-napadite de buruieni. De asemenea, Multilog vă permite să conectați programe de ieșire nu sunt în măsură să dea o concluzie la syslog. Astfel, puteți rula programul ca un serviciu, nu la toate destinate acestui scop. Am experienta de a folosi acest pachet pentru a rula DJBDNS, qmail, calmari și apache. Primul se adresează la locul de muncă este în conjuncție cu daemontools, a doua IMHO, de asemenea, a fost inițial proiectat pentru a rula prin daemontools DJB, cu toate că mulți dintre rula sale în mod tradițional.

Toate comenzile și metode sunt bazate pe munca cu RH pe bază de Linux (RH9, ASP9), ca este nici o experiență cu alte sisteme de operare. Dacă aveți un sistem diferit, și modul în care / comanda nu este potrivit, vă rugăm să contactați - modificările relevante vor fi incluse acolo unde este posibil.

Creați un director / pachet:

# Mkdir -p / pachet
# Chmod 1755 / pachet
# Cd / pachet

Descărcați codul sursă daemontools-0.76.tar.gz în / pachet:

# Gunzip daemontools-0.76.tar
# Tar -xpf daemontools-0.76.tar
# Rm daemontools-0.76.tar
# Cd admin / daemontools-0,76 / src

daemotools versiunea curentă, precum și qmail și DJBDNS, dă o eroare la asamblarea versiunii glibc 2.3.1 de mai sus. Prin urmare, este necesar să se aplice un patch pentru a rezolva această incompatibilitate, dacă aveți acolo. Patch-ul poate fi găsit pe ftp://moni.csi.hu/pub/glibc-2.3.1/. Creați un dosar pentru un plasture, descarcati-l, și să impună codul sursa:

# Plasture Mkdir
# Patch Cd
# Wget ftp://moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch
# Cd ..
# Cd ..
# Patch -p1

Asamblate și pachetul instalat:

După asamblare și instalare, program de svscanboot prescris în inittab (SV: 123456: respawn: / comanda / svscanboot) și daemon de inițializare este instruit să re-citit fișierul. Init începe svscanboot (acesta va fi acum întotdeauna rula la pornirea sistemului și repornire, în cazul în care picături dintr-o dată (sau te omor-l voi)). Noi verifica dacă totul a mers bine:

# Pstree
. skip.
| -svscanboot - + - readproctitle
`-svscan
. skip.
acest lucru înseamnă că svscanboot lansat și gata pentru a menține servicii.

Acum, pe scurt despre cum funcționează. Pe un sistem care rulează procesează un copac legat de daemontools arată astfel:

init- +
| -svscanboot - + - readproctitle
| `-svscan - + - supraveghează --- dnscache
| | -supervise --- Multilog
| | -supervise --- qmail-trimite - + - qmail-curate
| | | -qmail-lspawn
| | | -qmail-rspawn
| | `-splogger
| | -supervise --- tcpserver
| | -supervise --- splogger
| `-supervise --- calmar - + - redirector
| | -10 * [redirector]
| `-unlinkd

(Procese suplimentare sunt tăiate)

Svscanboot a lansat atunci când daemon sistem de inițializare din inittab. Svscanboot svscan începe programul în directorul / serviciu, am creat. Acesta va conține informații despre serviciile pe care vor monitoriza daemontools - un sub-directoare, câte unul pentru fiecare serviciu. În cazul în care svscanboot picătură este pornit din nou init daemon. Concluzie rulează svscan înainte svscanboot readproctitle în proces. Se pare ca acest lucru:
Urmat de 400 de pixeli, asa ca nu va alarmati pentru a le vedea în producția de ps - așa cum doriți. Ultimii 400 de bytes de ieșire svscan înlocuiți acești termeni. Acest lucru a fost făcut pentru a fi în măsură să identifice problemele, care rulează PS -auxww.

Svscan servește pentru a lansa și servicii de urmărire. Se rulează printr-un proces separat supraveghează este, care va monitoriza serviciul, pentru fiecare detectat directorul în / serviciu (cu excepția celor ale căror nume încep cu un punct). Svscan la fiecare 5 secunde, verificați directorul / serviciul pentru noi subdirectoare. În cazul în care acestea se găsesc, începe o nouă copie a supraveghea fiecare director. În cazul în care subdirectorul de serviciu conține director jurnal, acesta va fi execută o altă copie a supraveghea și pippeline create între ele. Acest lucru se face pentru înregistrări în jurnal a programului, fără a trece prin syslog - Utilizarea de ieșire de program de la stdout și stderr. Cele daemontools pentru aceste scopuri Execu programul Multilog - înlocuirea syslog de la DJB, deși funcționează pe principii diferite. De exemplu, dnscache pachetului DJBDNS afișează informații despre activitatea lor nu în syslog, și la stdout. Această ieșire este redirecționat către Multilog, care creează un subdirector în pagina principală fișierele jurnal și efectuează rotația lor. De asemenea, svscan redirecționează producția tuturor filialelor de a supraveghea readproctitle prin conducte, svscanboot proiectate.

Readproctitle svcscanboot rula programul. La începutul svscan, ea stderr și stdout redirecționat către readproctitle. Al doilea parametru este rulat un anumit număr de puncte (până la 400). La primirea stdin pe orice intrare, se afișează în locul acestor puncte. Acest lucru vă permite să vedeți imediat eroarea în listarea proceselor folosind ps -auxww. (Experiența a demonstrat că este destul de o caracteristică utilă). Pentru a șterge procesul readproctitle linie_cmd după eroarea este rezolvată, puteți rula script-ul, după cum urmează:

#! / Bin / sh
echo -n \
> „Erori de service: \
. \
(Tăietura 18 rânduri identice)
. \
„> / Proc /` pidof readproctitle` / fd / 0

Acest script trimite șirul de „erori de serviciu:“ și 400 de puncte de pe stdin procesului printr-un fișier special în / proc. Puteți crea pur și simplu script puncte executabile / rădăcină / bin, ca în acest fel au de obicei în calea ta.

Multilog citește o secvență de linii de la stdin și adaugă linii selectate într-un fișier jurnal. Ca parametrii săi rula servi mai mulți operatori, fiecare dintre care determină acțiunea efectuată la șirul primit.
Fiecare șir de caractere implicit va fi inregistrata.

operator
exclude termenul care conține șablonul.
operator
selectează un termen care conține șablonul.
Aceste reguli se aplică caracterul wildcard „*“.

avertismente:

Declaratie afișează primele 200 de caractere din stderr (care, aparent, vor cădea în readproctitle de ieșire).

fișiere de stat:

Operatorul înlocuiește conținutul fișierului de fiecare din șirul selectat (primul 1000 bytes).

Marcaje temporale:

Operatorul adaugă la începutul fiecărei linii simbolul @, un marcaj de timp precis (în format TAI64) și un spațiu. Această declarație trebuie să fie primul. Traduceți ștampila de timp într-o formă ușor de citit, puteți folosi programul tai64nlocal.

Fișiere log:

În cazul în care catalogul operatorului începe cu un punct sau o bară oblică, atunci operatorul adaugă fiecare rând selectat în fișierul jurnal într-un anumit director (în cazul în care directorul nu există, creați-o Multilog). Înregistrarea în jurnal se face după cum urmează:
Catalogul conține un număr de bușteni vechi, jurnalul cu numele de curent (log curent), precum și alte fișiere cu care Multilog monitorizează activitățile lor. Numele fiecărui fișier jurnal începe cu @, continuând un marcaj temporal care indică atunci când înregistrarea jurnalului a fost finalizată și se completează cu următoarele simboluri:
  • S: Fișierul este complet completat corespunzător și înregistrate pe disc.
  • u: Scrierea într-un fișier a fost completat incorect și pot fi trunchiate. Acest fișier nu a fost procesat de către operatorul! Processor
operator
Acesta este dimensiunea maximă a fișierului pentru catalog ulterioare operatorului. În cazul în care curentul ajunge la această dimensiune Multilog începe un nou fișier. Dimensiunea trebuie să fie între 4096 și 16777215 bytes. Dimensiunea implicită - 99999 octeți.
Operatorul determină numărul maxim de fișiere de jurnal pentru catalog ulterioare operatorului. Acest parametru nu ar trebui să fie mai mică de 2. Valoarea implicită - 10. Dacă redenumiți fișierul Multilog curent elimină cel mai vechi fișier jurnal în directorul, în cazul în care numărul lor este egal cu sau mai mare decât valoarea operatorului.
Operatorul determină procesorul (programul-handler) pentru catalog ulterioare operatorului. Actualul fișierul program va fi transferat la stdin înainte înainte de noul fișier. Programul de ieșire este stocat în fișierul vechi curent, atunci este redenumit și un nou fișier curent.