Frage

*/10 * * * * /usr/bin/flock -x -w 10 /tmp/craigslist.lock /usr/bin/lynx -width=120 -dump "http://sfbay.craigslist.org/search/roo/sfc?query=&srchType=A&minAsk=&maxAsk=1100&nh=6&nh=8&nh=16&nh=24&nh=17&nh=21&nh=22&nh=23&nh=27" | grep "sort by most recent" -A 53 > /home/winchell/apartments.txt

*/10 * * * * /usr/bin/flock -x -w 10 /tmp/craigslist.lock /usr/bin/php /home/winchell/apartments.php

Das ist ein Cronjob.Der PHP-Befehl in der zweiten Zeile scheint auch dann ausgeführt zu werden, wenn Lynx in „appartements.txt“ schreibt, und ich sehe den Grund dafür nicht.Geht diese korrekte Verwendung davon aus, dass ich versuche, das Lesen aus „appartments.txt“ zu verhindern, während lynx/grep darauf schreibt?Danke!

War es hilfreich?

Lösung

Ihre Verwendung ist nicht korrekt.Beachten Sie, dass Ihr erster Cron-Job eine Pipeline ist, die aus zwei Befehlen besteht:

/usr/bin/flock -x -w 10 /tmp/craigslist.lock /usr/bin/lynx -width=120 -dump
    "http://sfbay.craigslist.org/search/roo/sfc?query=&srchType=A&minAsk=&maxAsk=1100&nh=6&nh=8&nh=16&nh=24&nh=17&nh=21&nh=22&nh=23&nh=27"

was dann weitergeleitet wird an:

grep "sort by most recent" -A 53 > /home/winchell/apartments.txt

Der erste Befehl sperrt also eine Datei, aber der zweite Befehl schreibt in diese Datei!Der zweite Befehl wird problemlos ausgeführt, ohne auf die Sperre warten zu müssen.

Eine Möglichkeit, dies zu beheben, besteht darin, die Datei zu schreiben, während die Sperre gedrückt bleibt:

lynx etc... | grep etc.. |
    flock -x -w 10 /tmp/craigslist.lock tee /home/winchell/apartments.txt

Der Nachteil dieses Ansatzes besteht darin lynx Und grep wird auch dann ausgeführt, wenn die Datei gesperrt ist.Um dies zu verhindern, müssen Sie das Ganze unter Verschluss halten:

flock -x -w 10 /tmp/craigslock.lock sh -c "lynx etc... | grep etc... >thefile"

Bei diesem Ansatz müssen Sie sorgfältig auf die Angabe von Anführungszeichen als URL-Argument von Lynx achten, da hierfür doppelte Anführungszeichen erforderlich sind.

Endlich:Erwägen Sie die Verwendung curl oder wget anstatt lynx. lynx ist für die interaktive Nutzung gedacht!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top