2017-12-06 7 views
1

저는 내 서버 (Cent OS)에서 매일 실행하려는 Python 스크립트를 작성했습니다. 내 Python 스크립트에서 직접 bash 명령을 실행해야한다. 모든 것이 제대로 터미널에서 스크립트를 실행할 때 잘 작동하지만, bron 명령은 cron 작업이 스크립트를 실행할 때 실행되지 않습니다. 스크립트는 나머지 작업을 수행합니다 (데이터베이스에 삽입하는 등). 다음과 같이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(" ")) 

이 또한 내가 알에 방법 인쇄의 모든 출력을 저장하려면이 코드를 사용 OG 파일 : 사항 log.txt 파일이 생성되지

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() 

와 서버에서 스크립트를 실행 할 때 잘 작동하지만, 생각하는 모든 방법이 작동하지 않습니다 RM 등 CP, MV, 같은 명령을 실행합니다 :

python /home/skanydok/serverBarcodeScanner.py 

크론 작업으로 물속에 뭔가가 있어야한다고 생각합니다. 모든 도움을 주시면 감사하겠습니다.

+0

'python'의 절대 경로를 사용해 보셨습니까? 예를 들어'/ usr/bin/python/home/skanydok ...' –

+0

@ Farhan.K가 위에서 언급 한 것처럼 'python'의 절대 경로를 사용하거나'#!/bin/bash' 대신' . ~/.bash_profile'. 또한 스크립트 안에서 경로를 참조 할 때마다 절대 경로를 사용하는 것을 잊지 말고'cd'와'pwd'를 사용하여 스크립트가 필요한 경로에서 실행되고 있는지 확인하십시오. –

답변

1

이 문제는 cronjobs 그 자체 인과 관련이 있지만 스크립트에서 상대 경로를 사용한다는 점에서 문제가됩니다. 상대 경로는 "현재 작업 디렉토리"에 대해 해결되며 홈 디렉토리에서 스크립트를 수동으로 실행할 때와 cron으로 실행할 때 동일하지 않습니다. 해결책은 분명히 스크립트에서 절대 경로 만 사용하는 것입니다. 바꿀 필요가 없다면 python 스크립트 자체에서 해독 할 수 있습니다 (이 경우에 해당). 파이썬 스크립트에서 os.path.dirname(os.path.abspath(__file__))을 사용하여 스크립트의 디렉토리 경로를 가져옵니다.

+0

감사합니다, 매력처럼 작동합니다 :) – DanoPlurana