我有这个crontabconfiguration设置和下面的脚本。
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..
由于某种原因脚本已经开始运行,但脚本的其他部分还没有完成。 我不知道如果它的操作系统故障或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" # mh 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()
行之前。