crontab:正在运行的python脚本,但不执行OS命令

我有这个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()行之前。