SUのはcronでPythonは手動で実行とは異なる出力を提供します
質問
のUbuntuサーバー9.10、 ここに私のファイルは、test.py
import commands
blkid = commands.getoutput('blkid')
print blkid
私は手動で(SUとして)実行この:
python test.py
:予想通り私はのBLKID のの出力を得ます
/dev/sda1: UUID="3f0ac5bb-f0da-4574-81f5-77844530b561" TYPE="ext4"
/dev/sda5: UUID="67df0e7c-74fb-47dd-8520-ad720fbed67d" TYPE="swap"
/dev/sdb1: UUID="85466892-8dae-461c-95da-b8f91c2e766b" TYPE="ext3"
/dev/sdc1: UUID="91b84635-21c2-4d9a-84f8-2bbaab16d41f" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdd1: UUID="6a52c830-0029-4154-80cb-f17274eb6fed" SEC_TYPE="ext2" TYPE="ext3"
しかし、私は私のSUのcrontabにこれを追加するときます:
* * * * * python /home/myusername/test.py > /home/myusername/output
の出力の内容になります:
sh: blkid: not found
私はここで何をしないのですか? Pythonののコマンドのモジュールは、特定のSH-特定のコマンドのためですか?私は、システムコマンドを実行して、私が解析できるという変数に出力をキャプチャしようとしています。
解決
あなたがPythonのではなく、シェルの中でそれを見ている場合は、
問題は、ルートの($PATH
対あなたのos.environ['PATH']
である可能性があり;-)。 rootのPATHは、典型的には非常に保守的な(それはしてはならないため、それは危険なことだろう!)、あなたは簡単にそれがあなたのPATH上にあることを意味するものではなく、rootのこと絶対パスを指定せずにblkid
を実行していることからである。
だから、シェルプロンプト、which blkid
またはとにかくrootになり、そしてsudo su
で自分としてecho $PATH
を行う - あなたは急速に問題を確認することができます。そして、あなたはあなたが今やっているようBLKIDのgetoutput
コールで絶対完全なパスだけではなく、裸の識別子blkid
を使用して、それを修正します。
他のヒント
cronジョブの環境(およびPATH)は、必ずしもログインシェルと同じではありません。
所属していません StackOverflow