2017-12-06 20 views
1

私は毎日サーバー(Cent OS)上で実行したいPythonスクリプトを書いています。私は自分のPythonスクリプトからいくつかのbashコマンドを直接実行する必要があります。ターミナルからスクリプトを直接実行するとすべてうまく動作しますが、cronジョブがスクリプトを実行するときにbashコマンドは実行されませんが、スクリプトの残りの部分はジョブ(データベースなどに挿入)です。Pythonスクリプトはcronジョブでbashコマンドを実行しません

次のように私のcrontabに見える:

00 20 * * 1-5 /home/skanydok/script.sh 

script.shは、例示的な方法のように見えます、私は、サーバーからファイルを移動、コピー、または削除するために意図されているいくつかの方法があります

#!/bin/bash 

python /home/skanydok/serverBarcodeScanner.py 

が含まれています次のようになります。

def copyBackup(): 
cmd = "cp -r SKANY_DOKUMENTOW_" + str(now)[:10] + '_' + str(random) + " ./backupy" 
call(cmd.split(" ")) 

また、このコードを使用して、printメソッドのすべての出力を保存しますOGファイル:で、サーバー上でスクリプトを実行するときに、彼らが正常に動作が

class Logger(object): 
def __init__(self): 
    self.terminal = sys.stdout 
    self.log = open("./backupy/log.txt", "a") 

def write(self, message): 
    self.terminal.write(message) 
    self.log.write(message) 


sys.stdout = Logger() 

log.txtファイルは、RMなどのcp、mvは、のようなコマンドを実行することになっているすべてのメソッドが動作しない、作成されていません。

私は水の中に何かクルーの仕事がなければならないと思います、すべての助けが大いに評価されるでしょう。

+0

'python'の絶対パスを使ってみましたか?例えば、 '/ usr/bin/python/home/skanydok ...' –

+0

@ Farhan.Kが上記のように、 '#!/ bin/bash'の代わりに' python'の絶対パスを使用するか、 。 〜/ .bash_profile'。また、スクリプト内のパスを参照しているときは絶対パスを使うことを忘れないでください。あるいは、 'cd'と' pwd'チェックを使ってスクリプトが必要なパスで動作していることを確認してください。 –

答えて

1

これはcronjobs それ自体の問題です。ですが、スクリプトでは相対パスが使用されています。相対パスは "現在の作業ディレクトリ"に対して解決されます。これは、ホームディレクトリからスクリプトを手動で実行したときとcronで実行したときとでは異なります。解決策は、明らかにスクリプト内で絶対パスのみを使用することです。変更する予定がない場合は、pythonスクリプト自体でハーココードすることができます(ここではそうです)。または、os.path.dirname(os.path.abspath(__file__))をPythonスクリプトで使用して、スクリプトのディレクトリパスを取得します。

+0

ありがとう、魅力的な作品:) – DanoPlurana

関連する問題