مشكلة بيثون تنفيذ popen في كرون
سؤال
وأنا استخدم popen
لتنفيذ الأوامر في برنامج نصي بيثون، وأنا أسميها عبر كرون.
كرون ينادي هذا السيناريو ولكن السلوك ليس هو نفسه إذا أنا أسميها باليد.
المصدر:
from subprocess import Popen, PIPE
pp = Popen('/usr/bin/which iptables', shell=True, stdout=PIPE)
data = ''
for ln in pp.stdout:
data = data+ln
if data == '':
print 'ko'
else:
print 'ok : '+data
بواسطة اليد:
# python /home/user/test.py
> : /sbin/iptables
حسب كرون (في / تمة / err_cron):
* * * * * /usr/bin/python /home/user/test.py >> /tmp/err_cron
ko
ko
ko
وماذا كرون يتم تشغيل هذا البرنامج النصي عادة؟
المحلول
وعادة عندما يتم تشغيل العمليات من كرون، يتم تعيين PATH
إلى قيمة مقيدة جدا (الصفحة رجل لبلدي كرونتاب تقول /usr/bin:/bin
). قد تحتاج إلى إضافة:
PATH=/usr/bin:/bin:/sbin
وعلى الجزء العلوي من crontab الملف الخاص بك.
لا تنتمي إلى StackOverflow