Pergunta

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

Este é um trabalho cron.O comando php de segunda linha parece estar em execução mesmo enquanto o lynx está gravando em apartamentos.txt, e não vejo o motivo.Este uso é correto, assumindo que estou tentando impedir a leitura de apartments.txt enquanto o lynx/grep está gravando nele?Obrigado!

Foi útil?

Solução

Seu uso não está correto.Observe como seu primeiro cron job é um pipeline que consiste em dois comandos:

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

que é então canalizado para:

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

Portanto, o primeiro comando está bloqueando um arquivo, mas é o segundo comando que está gravando nesse arquivo!O segundo comando será executado sem esperar pelo bloqueio.

Uma maneira de corrigir isso seria gravar o arquivo enquanto segura o bloqueio:

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

A desvantagem desta abordagem é que lynx e grep execute mesmo se o arquivo estiver bloqueado.Para evitar isso, você terá que executar tudo sob sigilo:

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

Com esta abordagem, você terá que prestar muita atenção às citações como argumento de URL do lynx, pois isso exigirá aspas duplas.

Finalmente:considere usar curl ou wget em vez de lynx. lynx destina-se ao uso interativo!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top