الطريقة الصحيحة لتشغيل البرنامج النصي باستخدام كرون؟

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

سؤال

عند تشغيل برنامج نصي باستخدام cron، يجب أن يكون لأي ملف تنفيذي يتم استدعاؤه بالداخل المسار الكامل.اكتشفت هذا أثناء محاولتي الركض com.wondershaper, ، عندما ظهرت العديد من الأخطاء عند محاولة الاتصال بـ tc.لذا سؤالي هو ما هي الطريقة الصحيحة للتغلب على هذه المشكلة؟

الحلول الممكنة:

  • cd إلى المجلد القابل للتنفيذ وقم بإعداد روابط رمزية لأي ملف آخر يسمى قابل للتنفيذ هناك (لست متأكدًا مما إذا كان يعمل - قابلية النقل منخفضة)
  • استخدم المسارات الكاملة في البرنامج النصي (يعمل - إمكانية النقل منخفضة عبر توزيعات مختلفة)
  • تصدير متغير مسار بالمسارات المطلوبة داخل البرنامج النصي (لست متأكدًا مما إذا كان يعمل)

حسنا، شكرا مقدما لأي شخص يساعد.

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

المحلول

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

PATH=/usr/bin:/your/fancy/dir
MYAPPROOT=/var/lib/myapp

*/2 * * * * myappinpath
*/3 * * * * $MYAPPROOT/mylocalapp

نصائح أخرى

إذا كنت تستخدم Linux/bsd/mac، فيمكنك تعيين بعض متغيرات البيئة مثل PATH الحق في crontab, وبهذا تكون جاهزًا للمضي قدمًا بشكل عام.

إذا كنت على سولاريس، حسنًا، أصلي من أجلك.لكن لدي إجابة أيضاً:أنا مصدر عموما .profile قبل تشغيل أي شيء:

0 0 * * 0 . /home/myuser/.profile && cd /path && ./script

انتبه يا بلدي .profile الأحمال .bash_profile و .bashrc.فقط تأكد من أن الملف الذي مصدره يحتوي على ما تحتاجه.

نظرًا لأن cron لا يقوم بتشغيل تسجيل الدخول، فإن الملف الشخصي و/etc/profile لا يتم الحصول عليهما من المصدر.لذلك قد لا يتم تعيين PATH على القيمة التي تتوقعها.سأفعل ذلك أيضًا

  • قم بتعيين وتصدير PATH إلى القيمة المناسبة
  • استخدم المسارات الكاملة في البرنامج النصي

تفترض خدعتك مع الروابط الرمزية .موجود في PATH ولا يبدو لطيفًا

توصيتي:

تعيين كافة المتغيرات في ملف خارجي.أستخدم ملف "process_name.env" الموجود في /etc/process_name أو ملف مشابه.تخيل أن لديك برنامج نصي احتياطي.ثُم أنت:

  • قم بإنشاء /etc/backup.env وقم بوضع كافة متغيرات البيئة اللازمة للقيام بمهمة "النسخ الاحتياطي".
  • قم بتعديل البرنامج النصي الاحتياطي الخاص بك وأضف هذا السطر بعده كوخ:

    ./etc/backup.env # توجد نقطة ومسافة قبل المسار الكامل لبيئة النسخ الاحتياطي.

يعد هذا النهج في IMO أفضل من الإعلان عن المتغيرات في تعريفات CRON للأسباب التالية:

  • سهلة الصيانة.فقط قم بتحرير ملف .
  • من السهل تبديل التكوين/التكوين المركزي:
    • يمكن أن يكون لديك ملفات .env متعددة لاستخدام البرنامج النصي الخاص بك في مواقف مختلفة (على سبيل المثال، ضع في اعتبارك أن لديك مواقع احتياطية على .env الخاص بك، ويمكنك تمرير موقع .env كوسيطة وتشغيل وظيفة cron يوميًا مع توفير .env مع عدد قليل من المواقع و أسبوعيًا بمواقع مختلفة من خلال توفير .env آخر، مجرد مثال).
  • يمكنك الاحتفاظ بملفات .env الخاصة بك في VCS مثل SVN أو Git.
  • من السهل جدًا اختبار البرامج النصية الخاصة بك (ليست هناك حاجة لتنفيذها من CRON).

يعتبر

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