Флок правильное использование, чтобы предотвратить чтение во время записи

*/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

Это работа cron. Команда php второй строки, кажется, выполняется, даже когда lynx пишет в apartments.txt, и я не вижу причины. Это правильное использование, если я пытаюсь предотвратить чтение из apartments.txt, пока lynx/grep пишет в него? Спасибо!

1 ответ

Решение

Ваше использование не правильно. Обратите внимание, что ваше первое задание cron представляет собой конвейер, состоящий из двух команд:

/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

Итак, первая команда блокирует файл, но это вторая команда, которая пишет в этот файл! Вторая команда будет успешно выполнена, не дожидаясь блокировки.

Один из способов исправить это - записать файл, удерживая блокировку:

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

Недостатком этого подхода является то, что lynx а также grep запустить, даже если файл заблокирован. Чтобы предотвратить это, вам придется запустить все это под замком:

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

При таком подходе вам придется внимательно следить за цитированием в качестве аргумента URL lynx, так как для этого потребуется двойное цитирование.

Наконец: подумайте об использовании curl или же wget вместо lynx, lynx предназначен для интерактивного использования!

Другие вопросы по тегам