grey uso correcto para evitar la lectura, mientras que la escritura
Pregunta
*/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 es un trabajo cron.La segunda línea de comando php parece ser la ejecución, incluso mientras que el lince está escrito apartments.txt y no veo la razón.Es esto correcto uso suponiendo que yo estoy tratando de evitar la lectura de apartments.txt mientras que el lince/grep son la escritura?Gracias!
Solución
Su uso no es correcto.Observe cómo su primera tarea en el cron es una tubería que consta de dos 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 se transfiere a continuación:
grep "sort by most recent" -A 53 > /home/winchell/apartments.txt
Así que el primer mandamiento es el bloqueo de un archivo pero es el segundo comando que se escribe a ese archivo!El segundo comando estará feliz de ejecutar sin esperar a que el bloqueo.
Una forma de solucionar esto sería escribir el archivo manteniendo el bloqueo:
lynx etc... | grep etc.. |
flock -x -w 10 /tmp/craigslist.lock tee /home/winchell/apartments.txt
La desventaja de este enfoque es que lynx
y grep
correr, incluso si el archivo está bloqueado.Para evitar esto, usted tendrá que ejecutar la totalidad de la cosa en virtud de la cerradura:
flock -x -w 10 /tmp/craigslock.lock sh -c "lynx etc... | grep etc... >thefile"
Con este enfoque, usted tendrá que prestar atención a citar como el argumento URL de lince, ya que se requieren doble cotización.
Finalmente:considere el uso de curl
o wget
en lugar de lynx
. lynx
se supone que es para uso interactivo!