يمكن لمواقع الويب تشغيل المهام المجدولة باستخدام Cron

ساعة حائط

لدينا عدد من أنظمة المراقبة الزائدة عن الحاجة في العمل والتي تنفذ العمليات بانتظام. البعض يركض كل دقيقة ، والبعض الآخر مرة كل ليلة حسب ما يفعلونه. على سبيل المثال ، قد نقوم بتنفيذ نص برمجي لتصدير جميع العملاء الذين لم يجروا عملية شراء خلال 30 يومًا لإرسال قسيمة إليهم.

بدلاً من محاولة تتبع كل هذه الأشياء يدويًا ، من الأسهل بكثير إنشاء وظائف تتم جدولتها وتنفيذها تلقائيًا. في الأنظمة المستندة إلى Unix ، يتم تحقيق ذلك باستخدام Cron. بالنسبة لكم أيها الأشخاص الذين يعرفون ما تفعلونه ، فلا تتردد في تثقيفي وتثقيف القراء إذا ألقيت أي معلومات مضللة.

إنه أمر مؤسف ، لكن مطور الويب النموذجي لا يعرف Cron على الإطلاق. حتى لو كانت كذلك ، فإن شركات استضافة الويب غالبًا لا توفر الوصول إلى Cron أو دعمه. مضيفي هو أحد هؤلاء - يسمحون لك باستخدامه ، لكنهم لا يدعمونه.

ما هو كرون؟

كرون سمي للكلمة اليونانية كرونوس ، بمعنى الوقت . يعمل Cron في حلقة مستمرة لتشغيل المهام التي تراكمت بواسطة Crontab (ربما سميت باسم علامة التبويبulator. يشار إلى هذه المهام عادةً باسم Cronjobs ، ويمكن أن تشير إلى البرامج النصية في موقعك.

شرح مخطط كرون

كيف أقوم بإعداد Crontab

قد يكون تشغيل Cron بالفعل أمرًا صعبًا ، لذا فإليك ما تعلمته وكيف فعلت ذلك من أجله إذا مص:

  1. قمت بإعداد البرنامج النصي الخاص بي للتحقق من Twitter API لمعرفة ما إذا كان أي شخص قد رد على تضمين التغريدة. لقد قارنت هذه الرسائل بالرسائل التي حفظتها بالفعل على موقع الويب ، وأدخل أي رسائل جديدة.
  2. بمجرد أن يعمل البرنامج النصي ، قمت بتمكين أذونات للمستخدم لتنفيذ البرنامج النصي (744) وإضافة مرجع البرنامج النصي إلى ملف Cronjob الخاص بي - المزيد حول ذلك لاحقًا.
  3. ثم اضطررت إلى تسجيل الدخول إلى موقع الويب الخاص بي عبر SSH. على جهاز Mac ، استغرق ذلك فتح Terminal والكتابة SSH username@domain.com حيث كان اسم المستخدم هو اسم المستخدم الذي أرغب في استخدامه وكان المجال هو موقع الويب. ثم طُلب مني وأعطيت كلمة المرور.
  4. حاولت بعد ذلك تشغيل البرنامج النصي مباشرة من موجه الأوامر عن طريق كتابة اسم الملف والمسار النسبي على الخادم: /var/www/html/myscript.php
  5. بمجرد تشغيله بشكل صحيح ، أضفت كود Unix الضروري في السطر الأول من الملف: #! / usr / bin / php -q . أعتقد أن هذا يخبر Unix ببساطة باستخدام PHP لتنفيذ البرنامج النصي.
  6. في سطر أوامر المحطة الطرفية ، كتبت كرونتاب (قد يحتاج الآخرون إلى الكتابة -e كرونتاب) واضغط على Enter ... وكان هذا كل ما هو مطلوب!

بناء الجملة لملف Cronjob الخاص بك

فيما يتعلق بالرقم 2 أعلاه ، يستخدم Cron مخططًا بارعًا لتحديد وقت تنفيذ البرامج النصية الخاصة بك. في الواقع ، يمكنك في الواقع نسخ هذا ولصقه في ملف Cronfile الخاص بك (على مضيفي ، إنه موجود في / var / spool / cron / باسم الملف هو نفسه اسم المستخدم الخاص بي).

# + —————- دقيقة (0 - 59)
# | + ————- ساعة (0 - 23)
# | | + ———- يوم من الشهر (1 - 31)
# | | | + ——- شهر (1-12)
# | | | | + —- يوم من الأسبوع (0-6) (الأحد = 0 أو 7)
# | | | | |
* * * * * /var/www/html/myscript.php

ما ورد أعلاه سوف ينفذ السيناريو الخاص بي كل دقيقة. إذا كنت أرغب في تشغيله مرة واحدة فقط في الساعة ، فسأحدد فقط عدد الدقائق بعد الساعة التي أرغب في تشغيلها ، لذا إذا كانت عند علامة 30 دقيقة:

30 * * * * /var/www/html/myscript.php

تأكد من تعيين الأذونات لهذا الملف كملف قابل للتنفيذ أيضًا! لقد وجدت أن بناء الجملة والأذونات وتنفيذ crontab من نافذة Terminal كانت أهم العوامل. في كل مرة أقوم بإعادة حفظ الملف ، أجد أذوناتي بحاجة إلى إعادة التعيين أيضًا!

تحديث: إذا كنت ترغب في التأكد من تشغيل الوظائف ، فإن إحدى الطرق البسيطة هي تحديث حقل قاعدة البيانات بآخر مرة تم فيها تشغيل البرنامج النصي. إذا كان الأمر نادر الحدوث ، فيمكنك كتابة رسالة بريد إلكتروني مرسلة إلى نفسك.

موارد كرون إضافية:

كم عدد الوظائف التي يمكنك أتمتتها باستخدام Cron؟

8 تعليقات

  1. 1

    مقالة مغطاة جيدًا حول إعداد cron ، لشخص جديد على crojobs ، أصعب جزء في إعداد cron هو اكتشاف الفاصل الزمني لتنفيذ cronjob ، ومن الشائع جدًا الحصول على فاصل زمني خاطئ في المحاولة الأولى. إذا كانت cronjobs الخاصة بك حساسة للوقت ، فمن الجيد تضمين بعض الرموز في البرنامج النصي لتكرار الحالة بحيث يتم إعلامك بحالة تنفيذ المهمة.

  2. 2

    مرحبا دوغ ،

    هناك أمران يجب مراعاتهما عند العمل مع وظائف كرون.

    أولاً ، بعد بضع عشرات ، ستتمنى أن يكون لديك واجهة مستخدم وقاعدة بيانات وبناء جملة يبدو باللغة الإنجليزية 😉

    ثانيًا ، سيطلق cron المهمة في الوقت المحدد ، بغض النظر عما إذا كان الاستدعاء السابق للوظيفة قد اكتمل أم لا. لذا فإن تشغيل وظيفة واحدة في الدقيقة تستغرق دقيقتين سيؤدي سريعًا إلى تشغيل الكثير من نفس الوظيفة.

    بعد ذلك ، لا يوجد تقرير عن الخطأ عندما يحدث خطأ ما ، لذلك ستحتاج إلى إضافة تقرير الأخطاء الخاص بك.

    لقد عالجتها بطريقتين:
    - قم بتشغيل التطبيق عبر cron look في قاعدة بيانات لتحديد ما يجب تشغيله. قم بتشغيله مرة واحدة في الدقيقة أو الساعة حسب ما تريد
    - اجعل كل برنامج نصي يقوم بإنشاء ملف "قفل" في / tmp وإذا كان موجودًا ، فلا تبدأ مرة أخرى ، فهذا يمنع الوظائف المكررة إذا كنت لا تريدها
    - إذا وجد البرنامج النصي أن ملف القفل أقدم من ساعة واحدة (أو أيًا كان ما يوحي بأنك ماتت) ، فأرسل تنبيهًا عبر البريد الإلكتروني
    - اجعل النص يرسل بريدًا إلكترونيًا عند فشل الوظيفة حتى تعرف أن شيئًا ما قد حدث خطأ
    - انظر إلى أطر عمل مثل Flux أو الجدولة التجارية عندما تتجاوز احتياجاتك عددًا قليلاً من البرامج النصية

    كريس

  3. 4

    سأضيف أيضًا أنه في معظم أنظمة Linux / Unix ، "crontab -e" هو ما تستخدمه لتحرير crontab الخاص بك. أعتقد أن مضيفك (Jumpline) يستخدم نسخة معدلة لأسباب أمنية.

  4. 5

    ما زلت أتذكر اليوم الأول الذي قابلت فيه كروني. كنت قد سمعت أشياء عنها ، يمكن الاعتماد عليها ، دائمًا في الوقت المحدد ، ولكن أحيانًا كانت مربكة بعض الشيء بشأن نواياها.

    لقد وجدت هذا صحيحًا لأنها كانت لغزًا كاملاً بالنسبة لي في البداية. بعد أن سألت من حولها ، أدركت بسرعة إلى حد ما كيف تحب أن تعمل. الآن ، لا أستطيع أن أتخيل يومًا يمر بدونها في حياتي. إنها تجعل الأمور الدنيوية مثيرة ، وترفع الكثير من الأعباء عن كتفي.

    بكل جدية ، أشعر أنني خدشت السطح فقط بما يمكنني أتمتة مع وظائف cron. هم حقا أفضل صديق للمطورين. إذا كنت تستخدم شخصًا مثل CPanel لإدارة الخادم الخاص بك ، فإنه يوفر واجهة أكثر ودية لإنشاء crons. أكمل مع القوائم المنسدلة للدقائق والساعة واليوم والشهر وما إلى ذلك التي تنشئ خط cron لك.

  5. 7

    أرى بالتأكيد أن هذا شيء يجب أن يستخدمه كل مسوق ... هل هناك أي شخص يمكنه تقديم هذه الخدمة لأنها تبدو "تقنية" إلى حد ما؟

ما رأيك؟

يستخدم هذا الموقع نظام Akismet لتقليل الرسائل الضارة. تعرف كيف تتم معالجة بيانات تعليقك.