6

この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なのかわかりません。コマンドラインからスクリプトを呼び出すと、スクリプト自体は正常に実行されます。

なぜこれが起こっているのか誰にも分かりますか?

4

2 に答える 2

6

cdコマンドを実行するにはシェルが必要です。crontabで、shまたはbashSHELL として定義します。

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 でサブプロセスとしてシェルを開きます。

于 2013-08-27T23:16:04.357 に答える
2

2つのこと:cdすぐに終了するそのサブプロセスのディレクトリを設定します:

subprocess.call(["cd", "/home/atweb/Documents/opengrok"])

つまり、無駄なステップです。

次のサブプロセスは、前のサブプロセスの環境について何も知りません。

subprocess.call(["./stop_website"])

…なので走れません。すべてのプログラムをそのディレクトリで実行する場合は、次を使用します。

os.chdir("/home/atweb/Documents/opengrok")

行の前subprocess.call()

于 2013-08-27T23:15:27.013 に答える