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

这种方法的缺点是 lynxgrep 即使文件被锁定,也要运行。为了防止这种情况,你将不得不在锁下运行整个事情:

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

通过这种方法,您必须仔细注意引用lynx的URL参数,因为它需要双引号。

最后:考虑使用 curlwget 而不是 lynx. lynx 是为了互动使用!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top