2017-02-14 9 views
0

I次のcrontabがありますのcrontabには、Pythonスクリプトを実行することはできませんサードパーティ製のlib

22 * * * * cd /home/work/ui && /home/work/.jumbo/bin/python test.py >> result.log & 

そしてtest.py持って、次のコード:

#!/home/work/.jumbo/bin/python 
#coding=utf-8 

import datetime 
import hashlib 
import logging 
import os 
import Queue 
import signal 
import sys 
import threading 
import time 
import traceback 

#注释 

if __name__ == "__main__": 
    print 'Begin' 
    print 'End' 

OK、コードを右に実行することができますが、後でimport requestsを追加すると、正しく実行されません。私はlibパスを見つけることができないと思います。

したがって、私はsys.path.appendを使用しますが、それでも正しく実行することはできません。

#!/home/work/.jumbo/bin/python 
#coding=utf-8 

import datetime 
import hashlib 
import logging 
import os 
import Queue 
import signal 
import sys 
import threading 
import time 
import traceback 

sys.path.append('/home/work/.jumbo/lib/python2.7/site-packages/requests') 
print sys.path 

import requests 

#注释 

if __name__ == "__main__": 
    print 'Begin' 
    print 'End' 

次に、どうすればよいですか?

私はOSコマンドで正しく実行できます。だから私のコードはOKです。

答えて

3

Cronジョブは、非常に限られた環境変数のセットから始まります。 〜/ .profileや〜/ .login(または同様のもの)から得られる環境変数はおそらく1つ以上あります。

スクリプトにジョブ全体を動かしてみて、このようにそれを呼び出す:mycronjob

22 * * * * /home/work/ui/mycronjob 

あなたはこのようなものがあるだろう:あなたの$ SHELLがbashのある

#!/bin/bash 
source ~/.bash_profile 
cd /home/work/ui && /home/work/.jumbo/bin/python test.py >> result.log 

想定しており、 〜/ .bash_profileがあります。 他のシェルや他のinitファイル(〜/ .login、〜/ .profileなど)を使用している場合は、代わりにそのファイルを使用してください。最初

+0

感謝すべきだと思います

あなたが正しいです。 – thinkerou

0

ヒント: あなたは、このようなcrontabの中にログファイルに標準エラー出力だけでなく、標準出力をリダイレクトすることができます、私は付加されるパスが

sys.path.append('/home/work/.jumbo/lib/python2.7/site-packages') 
+0

ありがとう、私は 'ソース'を使用して、OKを実行することができます – thinkerou

関連する問題