سؤال
أقوم بتشغيل برنامج نصي PHP عبر CRON باستخدام WGET ، مع الأمر التالي:
wget -O - -q -t 1 http://www.example.com/cron/run
سيستغرق البرنامج النصي 5-6 دقائق كحد أقصى للقيام بمعالجته. هل ستنتظر ذلك ويعطيها طوال الوقت الذي يحتاجه ، أم أنه سيصبح وقتًا طويلاً؟
المحلول
وفق صفحة الرجل من WGT, ، هناك بعض الخيارات المتعلقة بالمهلات - وهناك مهلة قراءة افتراضية من 900s - لذلك أقول ، نعم ، قد تكون المهلة.
فيما يلي الخيارات المعنية:
-T seconds
--timeout=seconds
اضبط مهلة الشبكة على ثوانٍ. هذا يعادل التحديد
--dns-timeout
,--connect-timeout
, ، و--read-timeout
, ، جميعهم في وقت واحد.
ولهذه الخيارات الثلاثة:
--dns-timeout=seconds
قم بتعيين مهلة البحث DNS إلى ثوانٍ.
سوف تفشل عمليات البحث DNS التي لا تكتمل خلال الوقت المحدد.
بشكل افتراضي ، لا توجد مهلة على عمليات البحث عن DNS ، بخلاف تلك التي تنفذها مكتبات النظام.
--connect-timeout=seconds
قم بتعيين مهلة التوصيل إلى ثوانٍ.
سيتم إحباط اتصالات TCP التي تستغرق وقتًا أطول لتأسيسها.
بشكل افتراضي ، لا توجد مهلة اتصال ، بخلاف تلك التي تنفذها مكتبات النظام.
--read-timeout=seconds
قم بتعيين مهلة القراءة (وكتابة) إلى ثوانٍ.
يشير "الوقت" من المهلة المهلة إلى وقت الخمول: إذا لم يتم استلام أي بيانات في أي وقت من المرحلة من العدد المحدد من الثواني المحددة ، فإن فشل القراءة ويتم إعادة تنزيله.
لا يؤثر هذا الخيار بشكل مباشر على مدة التنزيل بأكمله.
أفترض استخدام شيء مثل
wget -O - -q -t 1 --timeout=600 http://www.example.com/cron/run
يجب التأكد من عدم وجود مهلة قبل أطول من مدة البرنامج النصي الخاص بك.
(نعم ، ربما يكون هذا هو الحل الأكثر وحشية ممكن ^ ^)
نصائح أخرى
المهلة الافتراضية هي 900 ثانية. يمكنك تحديد مهلة مختلفة.
-T seconds
--timeout=seconds
الافتراضي هو إعادة محاولة 20 مرة. يمكنك تحديد محاولات مختلفة.
-t number
--tries=number
حلقة الوصل: وثيقة رجل wget
نظرًا لأنه في سؤالك ، قلت إنه نص PHP ، ربما يكون الحل الأفضل هو إضافة البرنامج النصي الخاص بك ببساطة:
ignore_user_abort(TRUE);
بهذه الطريقة حتى لو wget
ينتهي ، يستمر البرنامج النصي PHP على الأقل حتى لا يتجاوز max_execution_time
الحد (توجيه INI: 30 ثانية بشكل افتراضي).
حسب wget
Anyay يجب ألا تغير مهلة ذلك ، حسب دليل UNIX مهلة WGET الافتراضية هي 900 ثانية (15 دقيقة), ، Whis أكبر بكثير من 5-6 دقائق التي تحتاجها.
قبل الإصدار 1.14 ، لم يتم الالتزام بوسائط مهلة WGET إذا كان التنزيل عبر HTTPS بسبب أ حشرة.