Administrator systemd, Partea 4

4. ucide demonul

Sistemul Kill daemon nu este dificil, este? Or. Nu este atât de simplu?
Dacă daemon dvs. funcționează ca un singur proces, într-adevăr este foarte simplu. Tu comanda killall rsyslogd, și jurnalul de sistem daemon se oprește. Cu toate acestea, această metodă nu este destul de corect, deoarece afectează nu numai demonul în sine, ci și pe alte procese cu același nume. Uneori, un astfel de comportament poate duce la consecințe neplăcute. Mai corect de a utiliza BIP-fișier:


$ Kill (pisica /var/run/syslogd.pid)

Asta e, cum ar fi, tot ce ai nevoie. Sau ne lipsește ceva?
Într-adevăr, ne uităm un lucru simplu: există servicii, cum ar fi Apache, crond, ATD, care, prin natura activității de serviciu ar trebui să fie executați procese copil. Poate fi specificată de programul utilizator absolut străine (de exemplu, cron / la sarcini, CGI-script-uri) sau procese complete de server (de exemplu, lucrători Apache). Când omori procesul principal, se poate opri toate procesele copil. Și nu se poate opri. De fapt, în cazul în care serviciul funcționează în mod normal, este de obicei oprită prin comanda de oprire. Pentru a ucide o provocare directă administratorului, de obicei folosit doar în caz de urgență în cazul în care serviciul nu funcționează corect și nu poate răspunde la comanda de oprire standard de.
Astfel, uciderea, de exemplu, serverul principal Apache, puteți obține departe de ea a moștenit rulează CGI-script-uri, iar mama lor va deveni automat PID 1 (init), astfel încât să se stabilească originea lor nu este atât de ușor.
grabă systemd să ne ajute. Systemctl ucide comandă vă permite să trimiteți un semnal la toate procesele care sunt generate ca parte a acestui serviciu. De exemplu:


# Systemctl ucide crond.service

Puteți fi sigur că toate procesele de serviciu cron va fi transmis semnalul SIGTERM. Desigur, puteți trimite și orice alt semnal. De exemplu, în cazul în care afacerea dvs. într-adevăr prea rău, și puteți utiliza SIGKILL:


# Systemctl ucide -s SIGKILL crond.service

După introducerea acestei comenzi, serviciul cron este ucis brutal, împreună cu toate procesele sale de copil, indiferent de cât de multe ori ea forkan, și nu contează modul în care au încercat să scape de sub controlul nostru de furcă dublu sau furculiță-bombardament.
Aproximativ Trans. Trebuie remarcat faptul că utilizarea grupurilor de control nu numai că simplifică procesul de distrugere a unei furci-bombe, dar, de asemenea, reduce semnificativ daunele cauzate de operarea unei furculiță-bombă. Deoarece systemd plasează automat fiecare serviciu și fiecare sesiune de utilizator într-un grup de control pe o resursă de timp CPU, lansarea de bombe furcă un utilizator sau un serviciu nu va crea probleme semnificative cu capacitatea de reactie a sistemului altor utilizatori și servicii. Astfel, ca o amenințare majoră furculiță-bombardament sunt singurele posibile procese de memorie epuizare și identificatorul (PID). Cu toate acestea, și ei, de asemenea, pot fi îndepărtate cu ușurință: suficient pentru a stabili limite adecvate cu privire la fișierul de configurare a serviciului (a se vedea systemd.exec (5).).
În unele cazuri, este necesar să se trimită un semnal la procesul de serviciu numele primar. De exemplu, folosind un SIGHUP, putem forța daemon pentru a re-citit fișiere de configurare. Desigur, transmite HUP procesele auxiliare, în acest caz, nu este necesar. Pentru a rezolva o astfel de potrivire bună problemă și o metodă clasică BIP-fișier, cu toate acestea, systemd și în acest caz, există o soluție simplă, care elimină necesitatea de a căuta fișierul dorit:


# Systemctl ucide -s HUP --kill-care = crond.service principal

Deci, ceea ce aduce un nou mod fundamental systemd în rutina crima proces demon? În primul rând, prima dată în istoria Linux oferă o metodă de muncă forțată opri serviciul, care nu depinde de cât de fidel procesul de bază al serviciului pentru a-și îndeplini obligațiile sale de a opri procesele de copil. După cum sa menționat mai sus, necesitatea de a trimite un SIGTERM sau un proces SIGKILL apare de obicei tocmai în situații de urgență atunci când nu poate fi sigur că demonul este corect toate îndeplini sarcinile.
După citirea celor de mai sus, s-ar putea întreba: Care este diferența dintre systemctl ucide și systemctl opri? Diferența este că ucide pur și simplu trimite un semnal la procesul specificat, în timp ce actele de oprire „în mod oficial“, o metodă specifică, provocând comanda specificată în parametrul ExecStop de configurare a serviciului. De obicei, comandă de oprire este suficient pentru a opri serviciul, și să ucidă trebuie să se recurgă la numai în cazuri extreme, de exemplu, atunci când serviciul este „agățate“ și nu răspunde la comenzi.
De altfel, atunci când se utilizează «-s», puteți specifica numele de semnal ca un prefix la SIG, și fără ea - ambele variante vor funcționa.
În concluzie, este în valoare de a spune că pentru noi este foarte interesant și surprinzător a fost faptul că, înainte de apariția systemd pentru Linux nu exista instrumente pentru a trimite un semnal corespunzător la serviciu ca un întreg, mai degrabă decât procesele individuale.