题
*/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正在写入公寓。txt,而我看不出原因。假设我试图阻止从公寓读取,这是正确的用法。txt而lynx/grep正在写入它?谢谢!
解决方案
你的用法不正确.请注意,您的第一个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
是为了互动使用!