Portál AbcLinuxu, 9. května 2025 23:11

Dotaz: Soubory a dva procesy

18.5.2011 08:32 Franta
Soubory a dva procesy
Přečteno: 271×
Odpovědět | Admin

Dobrý den,

mám script v Perlu, který komunikuje po síti s jinám zařízením, době jeho bětu je asi 10s poté se ukončí, tento script je volán externě z jiného programu  (proprietárního), problém nástava v případě kdy proprietární program volá tento script více násobně a cílové zařízení na to nění upůsobené.

Napadlo mě tedy rozdělit Perl script na dvě části, jeden bude zapisovat do určeného adresaře soubory s obsahem požadavku, tento bude volán z proprietárního programu a druhý bude v cronu spoušten v minutových intervalech se dívat do tohoto adresaře načitat postupně požadavky, vyřizovat a následně mazat tyto soubory.

Mám obavy, že bude docházet k problémům v podobě kdy se pustí cron začne načítat a zpracovávat soubory v adrešaří v tu chvíli se mu tak objevý nový soubor ve kterém bude např. jen polovina požadavku, protože se druhá část nestačila ještě zapsat.

Bude k tomu docházet nebo je zapsaní nějaka atomická operace v Linuxu a dokud v perl scriptu něudělám "close" descriptoru tak to prostě na disku nebude uloženo?

Jde mi vlastně o výtvoření jednoduché fronty požadavků, možná existuje lepší řešení, se soubory mi to přišlo takové přímočaré až na tuto obavu.

Děkuji za radu. Franta


Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.5.2011 09:19 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Soubory a dva procesy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zápis do súboru atomický nie je. Ale premenovanie súboru (alebo presun vrámci toho istého FS) áno. Vyrob súbor v inom adresári a až keď je celý zapísaný a close() bolo zavolané, tak ho presuň tam, kde sa pozerá cron.
18.5.2011 09:41 Franta
Rozbalit Rozbalit vše Re: Soubory a dva procesy
OK, diky za radu.
18.5.2011 14:48 l0gik | skóre: 22
Rozbalit Rozbalit vše Re: Soubory a dva procesy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co takhle např. nějakou databázi. Na todle by byla ideální např. sqlite. Se souborama máš tu potíž, že jeden soubor použít nejde kvůli neatomickým operacím a s víc souborama musíš řešit, kterýs už zpracoval a který ještě ne atd... Nehledě na to, že co když nějakou dobu kvůůli něčemu nepoběží cron, požadavků bude moc a spustěj se dva cronprocesy najednou atd... Databáze Ti zadarmo vyřeší atomicitu a je na todle IMHO daleko vhodnější.
18.5.2011 18:56 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Soubory a dva procesy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud se chcete držet jednoho souboru, můžete jej zamykat (funkce flock).
20.5.2011 11:11 ubuntak
Rozbalit Rozbalit vše Re: Soubory a dva procesy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Prijde mi to zbytecne tezkopadne. Vyuzil bych pipe fifo. man mkfifo. Do pipe zapisoval. Na pipe povesil cteni a vzdy kdyz prijdou data spracuju a cekam na dalsi. Tedy poud jsem pochopil spravne vas pozadavek. Pokud jste schpen s prop. softu spoustet script tak nevidim problem v tom tam zadat rovnou zapis do pipe. Odstrani se tak dalsi mezikrok.
20.5.2011 12:00 l0gik | skóre: 22
Rozbalit Rozbalit vše Re: Soubory a dva procesy
Todle řešení je hezké, ale má problém, že vyžaduje, aby ani jeden z programů nespad. Řešení se zápisem požadavlů je víc odolné.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.