我有一个使用ThreadPool进行多线程的python程序。该程序是shell脚本中的一个步骤。当我在命令行上手动执行shell脚本时,整个流程按预期工作。但是,当我将shell脚本作为cronjob执行时,似乎在python多线程步骤完全完成之前,流程就进入了下一步。
在python程序中,我调用AsyncResult.get(timeout)来等待所有结果返回,然后再继续。
也通过batch(1)
运行程序(参见命令man batch
的输出)。如果这可以正常工作,但是cron版本不能,那么几乎可以肯定这是环境变量设置的问题。为了验证这一点,从交互式shell中运行printenv
来检查您的环境。然后在crontab中做同样的事情(您只需要为它临时设置一个额外的cron条目)。在调用Python之前,尝试在shell脚本中设置变量。
batch(1)
工作,它可能与您的代码打开的文件有关。尝试运行shell脚本,将输入从/dev/null重定向,输出到一个文件:
$ /usr/local/bin/myscript </dev/null >|/tmp/outfile.txt 2>&1
尝试在您的crontab
中设置"TERM=xterm"
(或您拥有的任何env变量,在您的终端上通过命令'env'确定)。