قطيع الاستخدام الصحيح لمنع القراءة أثناء الكتابة

StackOverflow https://stackoverflow.com//questions/11705393

  •  13-12-2019
  •  | 
  •  

سؤال

*/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 بالكتابة عليه؟شكرًا!

هل كانت مفيدة؟

المحلول

استخدامك غير صحيح.لاحظ كيف أن مهمة 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"

باستخدام هذا الأسلوب، سيتعين عليك الاهتمام جيدًا بالاقتباس باعتباره وسيطة URL الخاصة بـ lynx، حيث سيتطلب ذلك اقتباسًا مزدوجًا.

أخيراً:فكر في استخدام curl أو wget بدلاً من lynx. lynx والمقصود للاستخدام التفاعلي!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top