*/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
这是一项计划工作。第二行php命令似乎正在执行,即使lynx写入apartments.txt,我也没有看到原因。这是正确的用法,假设我试图阻止从apartments.txt读取而lynx / grep写入它?谢谢!
答案 0 :(得分:2)
您的使用不正确。请注意您的第一个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"
使用这种方法,你必须要特别注意引用作为lynx的URL参数,因为它需要双引号。
最后:考虑使用curl
或wget
代替lynx
。 lynx
用于交互式使用!