كرون يمر مجموعة الحد الأدنى من متغيرات البيئة إلى وظائفك. لمعرفة الفرق ، أضف وظيفة وهمية مثل هذا:
>* * * * * إنف /تمب / إنف.الناتج
انتظر /tmp/env.output ليتم إنشاؤه ، ثم قم بإزالة المهمة مرة أخرى. الآن مقارنة محتويات /tmp/env.output مع إخراج env تشغيل في محطة العادية.
مشترك "مسكتك" هنا هو PATH متغير البيئة يجري مختلفة. ربما يستخدم البرنامج النصي كرون الخاص بك الأمر somecommand وجدت في /opt/someApp/bin، التي أضفتها إليها PATH في /etc/environment? كرون يتجاهل PATH من هذا الملف ، لذلك رونينغ somecommand من السيناريو الخاص بك سوف تفشل عند تشغيل مع كرون ، ولكن العمل عند تشغيل في محطة. ومن الجدير بالذكر أن المتغيرات من /etc/environment سيتم تمريرها إلى وظائف كرون ، وليس فقط المتغيرات كرون يحدد على وجه التحديد نفسها ، مثل PATH.
للالتفاف على ذلك ، مجرد مجموعة بنفسك PATH متغير في الجزء العلوي من البرنامج النصي. على سبيل المثال.
#!/bin/bashPATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin# rest of script follows
يفضل البعض استخدام المسارات المطلقة لجميع الأوامر بدلا من ذلك. أوصي ضد ذلك. ضع في اعتبارك ما يحدث إذا كنت تريد تشغيل البرنامج النصي الخاص بك على نظام مختلف ، وعلى هذا النظام ، يكون الأمر في /opt/someAppv2.2/bin بدلا من ذلك. عليك أن تذهب من خلال استبدال البرنامج النصي بأكمله /opt/someApp/bin مع /opt/someAppv2.2/bin بدلا من مجرد القيام تحرير صغير على السطر الأول من البرنامج النصي.
يمكنك أيضا تعيين متغير المسار في ملف كرونتاب ، والتي سوف تنطبق على جميع وظائف كرون. على سبيل المثال.
بلدي أعلى مسكتك: إذا كنت قد نسيت لإضافة سطر جديد في نهاية crontab الملف. وبعبارة أخرى ، يجب أن ينتهي ملف كرونتاب بسطر فارغ.
يوجد أدناه القسم ذي الصلة في صفحات الرجل لهذه المشكلة (man crontab ثم انتقل إلى النهاية):
Although cron requires that each entry in a crontab end in a newline character, neither the crontab command nor the cron daemon will detect this error. Instead, the crontab will appear to load normally. However, the command will never run. The best choice is to ensure that your crontab has a blank line at the end. 4th Berkeley Distribution 29 December 1993 CRONTAB(1)
أسماء ملفات البرنامج النصي في cron.d/, cron.daily/, cron.hourly/، إلخ.، يجب ألا يحتوي على نقطة (.) ، وإلا فإن أجزاء التشغيل سوف تتخطاها.
انظر تشغيل-أجزاء (8):
If neither the --lsbsysinit option nor the --regex option is given then the names must consist entirely of upper and lower case letters, dig‐ its, underscores, and hyphens. If the --lsbsysinit option is given, then the names must not end in .dpkg-old or .dpkg-dist or .dpkg-new or .dpkg-tmp, and must belong to one or more of the following namespaces: the LANANA-assigned namespace (^[a-z0-9]+$); the LSB hierarchical and reserved namespaces (^_?([a-z0-9_.]+-)+[a-z0-9]+$); and the Debian cron script namespace (^[a-zA-Z0-9_-]+$).
لذلك ، إذا كان لديك برنامج نصي كرون backup.sh, analyze-logs.pl في cron.daily/ الدليل ، وكنت أفضل لإزالة أسماء التمديد.
إذا كان الأمر كرونتاب الخاص بك لديه % الرمز في ذلك ، يحاول كرون تفسيره. لذلك إذا كنت تستخدم أي أمر مع % في ذلك (مثل مواصفات التنسيق لأمر التاريخ) سوف تحتاج إلى الهروب منه.
من الممكن أيضا أن تكون كلمة مرور المستخدم قد انتهت صلاحيتها. حتى كلمة مرور الجذر يمكن أن تنتهي. يمكنك tail -f /var/log/cron.log وسترى كرون تفشل مع كلمة المرور منتهية الصلاحية. يمكنك تعيين كلمة المرور حتى لا تنتهي صلاحيتها أبدا عن طريق القيام بذلك: passwd -x -1 <username>
في بعض الأنظمة (ديبيان ، أوبونتو) لا يتم تمكين تسجيل الدخول إلى كرون بشكل افتراضي. في / الخ / رسيسلوغ.أسيوط أو / الخ / رسيسلوغ.د / 50-افتراضي.أسيوط الخط:
# cron.* /var/log/cron.log
يجب تحريرها (sudo nano /etc/rsyslog.conf) غير معلن ل:
يجب إغلاق ‘كرونتاب-ه’ لكرون أن تأخذ تأثير. على سبيل المثال باستخدام فيم أنا تحرير الملف واستخدام :ث لكتابة ذلك ولكن لا يتم إضافة المهمة إلى كرون حتى استقال أيضا. لذلك لن أرى الوظيفة إلا بعد’: س ’ أيضا.