foglcz's posterous

 
« Back to blog

Démonické php v pasti?

Arthur Dent se ptá. A bohužel už má zavřené komentáře (a nebo se musím přihlásit či jsem prostě .. hloupý.) Nicméně řešení na místě naznačené pomocí vytváření služby je "správné". Napsat si démona pomocí hacku je funkční, ačkoli to není nativní podpora - nad tím nechť každý uroní svojí soukromou slzu.

Rád bych ale zanechal jeden "hack" který se hodí, pokud máte možnost editovat crontab a můžete démonický skript spouštět shell skriptem:

Task is to remove temporary files (rubbish) after executing a PHP script regardless of how the script ends. Solution is to use bash traps.

Example:

index.sh
#!/bin/bash
trap "{ [ -f rubbish ] && (cat rubbish | xargs rm; rm rubbish); exit 255; }" SIGINT SIGTERM EXIT php demon.php

Your PHP script should create a rubbish file (rubbish in our case), which contains a list of files created during execution. The trap commmand will remove those files after the script ends. The trap command can catch more signals (http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_02.html), therefore the rubbish will be removed even if the bash script is killed.

Takto se dá jednoduše odstranit lockfile a veškeré dočasné soubory - předpokládejme, že cron démona spouští každou hodinu. Při spuštění se démon mrkne, jestli lockfile existuje a pokud ano, skončí (a nechá již spuštěného svému osudu). Lockfile by nám v tomto případě suploval jednu funkci navíc - jistotu, že vše dočasné zase zmizí ať už skript skončí jakkoliv.

Pokud toto udělat nemůžeme, pak je možností více (viz třeba naznačovaný 5 minutový timeout). Na to bych se ale osobně nespoléhal.

-------------------------------------------------------------------------------

A abych odpověděl na poznámku pod čarou - ano, řešili. A řešili jsme to takhle. V druhém případě přímo javou. A na obecném webserveru? Pravděpodobně bych šáhnul k řešení "vytáhnu si Pentium III a nechám na něm tu službu běžet nonstop" - a vždy, když mi přijde icq zpráva ji nahraju na servisní skript pomocí SOAP či něčeho podobného (tedy, dnes by to byl rest, no ne?)

Comments (0)

Leave a comment...