2012-07-28 4 views
0

*/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에 쓰는 동안에도 실행중인 것 같습니다. 이유는 알 수 없습니다. lynx/grep이 쓰고있는 동안 apartments.txt에서 읽지 못하도록하려는 경우 올바른 사용법입니까? 감사!

답변

2

사용법이 올바르지 않습니다. 다음으로 파이프됩니다

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

: 첫 번째 cron 작업이 두 명령으로 구성된 파이프 라인을 얼마나 주목

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 실행됩니다. 이를 방지하기 위해, 당신은 잠금 아래 모든 일을 실행해야합니다 : 당신이 이중 인용 필요로 살쾡이의 URL 인수로 인용에주의를 지불해야 할 것이다이 방법으로

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

합니다.

마지막으로 lynx 대신 curl 또는 wget을 사용하는 것이 좋습니다. lynx은 대화식 사용을위한 것입니다!