كيفية تصحيح مسألة كرون ليس المنفذة معين النصي — أو غيرها ؟

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

سؤال

لدي القضبان السيناريو الذي أود أن تشغيل يوميا.أعرف أن هناك العديد من الأساليب التي كرون قد script/runner النهج هو الامتعاض من قبل البعض ، ولكن يبدو لتلبية احتياجات بلدي.

ومع ذلك السيناريو هو عدم الحصول على تنفيذه كما كان مقررا.

طلبي يعيش في /data/myapp/current, و السيناريو في script/myscript.rb.أنا يمكن تشغيله يدويا دون مشكلة root مع:

/data/myapp/current/script/runner -e production /data/myapp/current/script/myscript.rb

عندما أفعل ذلك ، خاصة ملف السجل (log/myscript.log) يحصل على تسجيل كما هو متوقع:

Tue Mar 03 13:16:00 -0500 2009 Starting to execute script...
...
Tue Mar 03 13:19:08 -0500 2009 Finished executing script in 188.075028 seconds

لقد كان تعيين إلى تشغيل مع cron كل صباح في الساعة 4 صباحا. root's crontab:

$ crontab -l
0 4 * * * /data/myapp/current/script/runner -e production /data/myapp/current/script/myscript.rb

في الواقع, يبدو انها حاولت تشغيل مؤخرا هذا الصباح!

$ tail -100 /var/log/cron
...
Mar  2 04:00:01 hostname crond[8894]: (root) CMD (/data/myapp/current/script/runner -e production /data/myapp/current/script/myscript.rb)
...
Mar  3 04:00:01 hostname crond[22398]: (root) CMD (/data/myapp/current/script/runner -e production /data/myapp/current/script/myscript.rb)
...

ومع ذلك ، هناك أي إدخال في ملف سجل ، والبيانات التي يجب أن التحديث لم يتم الحصول على تحديث.سجل أذونات الملف (كاختبار) تم تعيين حتى على الصعيد العالمي للكتابة:

$ ls -lh
total 19M
...
-rw-rw-rw- 1 myuser apps 7.4K Mar  3 13:19 myscript.log
...

أنا على التوالي على CentOS 5.

لذا أسئلتي هي...

  1. أين يمكنني البحث عن المعلومات لتصحيح هذا ؟
  2. يمكن أن يكون هذا سيلينو المسألة ؟ هل هناك إطار أمني يمكنني تعيين أو تغيير قد حل هذا الخطأ ؟

شكرا لك!

التحديث

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

$ cat cron.log 
/usr/bin/env: ruby: No such file or directory

$ head /data/myapp/current/script/runner 
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/boot'
require 'commands/runner'

مضيفا محددة روبي قابل للتنفيذ أن الأمر لم خدعة:

$ crontab -l
0 4 * * * /usr/local/bin/ruby /data/myapp/current/script/runner -e production /data/myapp/current/script/myscript.rb >> /data/myapp/current/log/cron.log 2>&1
هل كانت مفيدة؟

المحلول

بشكل افتراضي كرون رسائل انتاجها إلى المستخدم الذي ركض عليه.هل يمكن أن تبدو هناك.

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

هنا هو كيف يمكنك إعادة توجيه المعياري و stderr إلى ملف السجل:

cd /home/deploy/your_app/current; script/runner -e production ./script/my_cron_job.rb >> /home/deploy/your_app/current/log/my_file.log 2>&1

على >> توجيه المعياري إلى ملف ، ، 2>&1 الموجهات stderr إلى المعياري لذلك أي خطأ سيتم تسجيل الرسائل أيضا.

بعد ذلك, سوف تكون قادرة على فحص رسائل الخطأ أن نرى ما يحدث في الواقع.

نصائح أخرى

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

على لينكس ، تأكد من أن جميع ملفات التكوين (/etc/crontab, /etc/crond.{اليومية ، كل ساعة ، الخ}/* و /etc/cron.د/*) هي فقط للكتابة إلى المستخدم الجذر و ليست روابط الرمزية ، وإلا فإنها لن تكون حتى النظر فيها.

للسماح غير الجذر و/أو روابط الرمزية ، حدد الخيار-p إلى crond الخفي.

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