سؤال

وأنا استخدم 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 الملف الخاص بك.

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