質問

popen を使用してPythonスクリプトでコマンドを実行し、cron経由で呼び出します。
Cronはこのスクリプトを呼び出しますが、手動で呼び出した場合の動作は同じではありません。

出典:

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

cronによる(/ tmp / err_cron内):

* * * * * /usr/bin/python /home/user/test.py >> /tmp/err_cron
ko
ko
ko

cronがこのスクリプトを正常に実行しないのはなぜですか?

役に立ちましたか?

解決

通常、プロセスがcronから実行される場合、 PATH は非常に制限された値に設定されます(私のcrontabのマニュアルページには / usr / bin:/ bin と書かれています) 。以下を追加する必要がある場合があります。

PATH=/usr/bin:/bin:/sbin

crontabファイルの先頭へ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top