Folosind fișierele pid pentru a împiedica repornirea scriptului, perl, assembler, si - blog

Folosind modulele File :: Pid, ​​Pid :: File :: Flock și File :: Flock :: Tiny. Blocarea fișierelor, lucrul cu fișierele pid. Lucrați doar o singură copie a scenariului la un moment dat. Protecția împotriva repornirea aceluiași script, înainte ca prima instanță să-și încheie activitatea.







Să presupunem că există un script perl care ia date de la servere la distanță. Sau transportă date de la o sursă la tabelele bazei de date. Scriptul rulează destul de mult, de la o jumătate de oră și chiar mai mult - depinde de cantitatea de date, de viteza de răspuns a serverelor la distanță și așa mai departe. Rulează pe cron, o dată pe oră.

Pentru a evita problemele cu duplicarea datelor, blocarea reciprocă în baza de date etc. este necesar ca scriptul să fie rulat întotdeauna doar într-o singură instanță.

Pentru a face acest lucru, puteți utiliza un fișier pid. La pornire, scriptul verifică un fișier pid. Dacă fișierul este disponibil, îl blochează și își salvează PID-ul în fișier și numai apoi continuă să-și desfășoare activitatea de bază. Dacă fișierul există, dar accesul la acesta este blocat - scriptul se oprește imediat. Dacă BIP-fișier nu există, script-ul creează, blocarea, păstrează pid sa, și vom proceda la munca de fond.

Pentru a nu reinventa roata, puteți găsi modulele cpan pentru a lucra cu fișierele pid. În aplicații simple, acestea vor fi suficiente.

Fișier :: Flock :: Tiny

File :: Flock :: Tiny este un modul foarte util pentru lucrul cu fișierele pid.

Instalarea are loc fără probleme.

Încercă să blocheze fișierul specificat și să stocheze ID-ul procesului curent în el. Dacă încercarea este reușită - returnează o legătură către obiectul blocat, dacă nu - returnează undef. După finalizarea procesului, fișierul nu este șters, dar blocarea va fi eliminată. La execuția repetată, fișierul va fi din nou blocat, ID-ul procesului din fișier este actualizat.







Șterge toate datele din fișierul blocat, dacă există, și salvează ID-ul curent al procesului în el.

Îndepărtează blocarea și închide fișierul.

Metoda închide descriptorul fișierului, dar nu elimină blocarea din fișier! Poate fi folosită dacă există procese copil care sunt generate, pentru care este necesară o blocare pentru altceva.

Cu toate acestea, această metodă nu funcționează pe toate sistemele de operare, prin urmare, în numele programelor de portabilitate - este mai bine să nu o utilizați.

Pid :: Fișier :: Flock

Exemplu de utilizare, pid4.pl:

Înainte de a verifica, este într-adevăr posibil să împiedicați scriptul să ruleze din nou folosind
Fișierul :: Pid nu a fost atins. Nu văd punctul. Probabil, acest modul nu devine relevantă în timp, acesta este scris greșit (mai probabil), și are o problemă cu utilizarea de sisteme de operare diferite.

Mi-am amintit că fișierul :: Pid a fost folosit într-unul din sistemele pe care le-am întâlnit acum 3 ani. Scriind scripturi a existat întotdeauna o problemă. Ori nu au început deloc, sau au fost lansate în mai multe exemplare. Acum este clar de ce. Nu o recomand.

Link-uri utile

Navigare după înregistrări

În cazul în care procesul se încadrează undeva în mijloc, blocarea este îndepărtată?

Am peste tot o legătură cu memcached sau redis, am pus semn de blocare cu expira. Dacă procesul a căzut și nu a înlăturat încuietoarea din spatele lui, atunci el va muri singură după un timp.

Depinde de modul care este utilizat pentru verificare. Ceea ce am dat ca exemplu, verificați blocarea și procesul însuși la începutul lucrării. Dacă procesul nu mai este - atunci "blocarea" nu este validă. De fapt, nu este folosit pentru a bloca nivelul sistemului de operare, atunci când m-am dus pentru a edita și BIP-fișier în timpul procesului de MC - sistem I și nu spun un cuvânt :) Deci, dacă vă așteptați de acces pe cineva rău intenționat la pid -files, este necesar înainte de introducerea unui astfel de sistem, verificați-l corect.

Căutați în blogul programatorului







Trimiteți-le prietenilor: