الطريقة الصحيحة لتشغيل البرنامج النصي باستخدام كرون؟
سؤال
عند تشغيل برنامج نصي باستخدام 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).
يعتبر