簡體   English   中英

crontab:正在運行python腳本但不執行OS命令

[英]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中將shbash定義為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM