[英]crontab: python script being run but does not execute OS Commands
我有這個crontab配置設置和以下腳本。
MAILTO="abc@avc.com"
41 15 * * * /usr/bin/python /home/atweb/Documents/opengrok/setup_and_restart.py > /home/atweb/Documents/opengrok/restart_log.txt 2&>1
而python腳本就是這樣的
import subprocess
import os
from time import gmtime, strftime
def main():
print(strftime("%a, %d %b %Y %X +0000", gmtime()))
print('Running opengrok index..')
subprocess.call(["cd", "/home/atweb/Documents/opengrok"])
subprocess.call(["./stop_website"])
print('Stopped website...')
subprocess.call(["./index_opengrok"])
print('finished indexing...')
subprocess.call(["./setup_opengrok"])
print('setup finished...')
subprocess.call(["./start_website"])
print('Finished opengrok index..')
if __name__ =='__main__':main()
這是輸出日志
Tue, 27 Aug 2013 22:41:01 +0000
Running opengrok index..
由於某種原因,腳本已開始運行,但腳本的其他部分尚未完成。 我不確定它是OS故障還是cron故障或python。 當我從命令行調用腳本時,腳本本身運行正常。
有誰知道為什么會這樣?
你需要shell來運行cd
命令。 在你的crontab中將sh
或bash
定義為SHELL。
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO="abc@avc.com"
# m h dom mon dow command
41 15 * * * /usr/bin/python /home/atweb/Documents/opengrok/setup_and_restart.py > /home/atweb/Documents/opengrok/restart_log.txt 2&>1
或者在python中打開shell作為子進程。
兩件事:你的cd
將設置該子進程的目錄,該目錄立即退出:
subprocess.call(["cd", "/home/atweb/Documents/opengrok"])
換句話說,這是一個浪費的步驟。
下一個子進程對前一個環境一無所知:
subprocess.call(["./stop_website"])
......所以它將無法運行。 如果您希望所有程序都在該目錄中運行,請使用:
os.chdir("/home/atweb/Documents/opengrok")
在任何subprocess.call()
行之前。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.