سؤال

أقوم بتشغيل برنامج نصي 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 بسبب أ حشرة.

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