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