سؤال

كيف يقوم الأشخاص بنشر/التحكم في الإصدار cronjobs في الإنتاج؟أنا مهتم بالاتفاقيات/المعايير التي يستخدمها الأشخاص أكثر من أي حل معين، ولكنني أستخدم git للتحكم في المراجعة، ويقوم cronjob بتشغيل برنامج نصي python/Django.

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

المحلول

إذا كنت تستخدم قماش بالنسبة إلى عملية النشر، يمكنك إضافة وظيفة تقوم بتحرير crontab الخاص بك.

def add_cronjob():
    run('crontab -l > /tmp/crondump')             
    run('echo "@daily /path/to/dostuff.sh 2> /dev/null" >> /tmp/crondump')
    run('crontab /tmp/crondump')

سيؤدي هذا إلى إلحاق وظيفة بـ crontab الخاص بك (إخلاء المسؤولية:لم يتم اختباره تمامًا وليس ضعيفًا جدًا).

  1. احفظ crontab في ملف مؤقت.

  2. إلحاق سطر بملف tmp.

  3. اكتب crontab مرة أخرى.

ربما لا يكون هذا بالضبط ما تريد القيام به ولكن على هذا المنوال يمكنك التفكير في التحقق من crontab في git والكتابة فوقه على الخادم مع كل عملية نشر.(إذا كان هناك مستخدم مخصص لمشروعك.)

نصائح أخرى

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

والسيناريو النسيج وأنا استخدم يبدو شيئا من هذا القبيل (بعض التعليمات البرمجية حجب رعاية مثل النسخ الاحتياطي):

def deploy_crontab():
    put('crontab', '/tmp/crontab')
    sudo('crontab < /tmp/crontab')

ويمكنك أيضا أن تأخذ نظرة على:

HTTP: // django- fab-deploy.readthedocs.org/en/0.7.5/_modules/fab_deploy/crontab.html#crontab_update

وجانغو-القوات المسلحة البوروندية-نشر وحدة لديها عدد من النصوص مريحة بما في ذلك crontab_set وcrontab_update

وربما يمكنك استخدام شيء من هذا القبيل كفينغين / الشيف للنشر (يمكن نشر كل شيء - بما في ذلك الوظائف كرون)

ولكن، إذا كنت تسأل هذا السؤال - أنه يمكن أن يكون لديك العديد من خوادم الإنتاج كل منها يعمل عدد كبير من المهام المجدولة. إذا كان هذا هو الحال، وربما كنت تريد الأداة التي لا يمكن نشر فرص العمل فقط، ولكن أيضا تتبع الفشل النجاح، تسمح لك بالبحث بسهولة في السجلات من الماضي البعيد، تشغيل الإحصاءات، تسمح لك بسهولة تغيير الجدول الزمني لكثير من الوظائف و خوادم في آن واحد (بسبب الصيانة المخططة ...) الخ.

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

هناك بالفعل 3 خيارات لنشر crontab يدويًا إذا لم تتمكن من توصيل نظامك بنظام إدارة التكوين مثل cfengine/puppet.

يمكنك ببساطة استخدام crontab -u المستخدم -e لكنك تخاطر بحدوث خطأ لدى شخص ما في النسخ/اللصق.

يمكنك أيضًا نسخ الملف إلى دليل cron ولكن لا يوجد فحص بناء جملة للملف ويجب عليك تشغيله في Linux المس /var/spool/cron لكي يتمكن crond من التقاط التغييرات.

ملحوظة سوف ينسى الجميع أمر اللمس في مرحلة ما.

في تجربتي، هذه الطريقة هي طريقتي اليدوية المفضلة لنشر crontab.

diff /var/spool/cron/<user> /var/tmp/<user>.new
crontab -u <user> /var/tmp/<user>.new

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

وظائف

إذا كنت تستخدم جانغو، نلقي نظرة على النظام من جانغو الأوامر-ملحقات .

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

Buildout لإدارة مشاريعي جانغو. مع Buildout، وأنا استخدم z3c.recipe.usercrontab لتثبيت كرون الوظائف في نشر أو التحديث.

وجود مشروع تحت السيطرة نسخة، بما في ذلك crontab.txt الخاص بك، هو ما تفضل. ثم، مع نسيج ، بل هو بسيط مثل هذا:

@task
def crontab():
    run('crontab deployment/crontab.txt')

وهذا سيتم تثبيت محتويات deployment/crontab.txt إلى كرونتاب للمستخدم الذي الاتصال بالخادم. إذا كنت لا تملك مشروعا كاملا على ملقم، وكنت أريد أن put الملف كرونتاب أولا.

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