python - crontab 即使在添加路径后也无法使用 anaconda python(cron 调用 .sh 文件,而后者又调用 .py 文件)
问题描述
我有一个 cronjob:
1 11 * * * /home/ubuntu/anaconda3/bin/python /home/ubuntu/ga_data/gaV4/tva_gaApiUpdate.sh > /dev/null 2 >> tvaUpdater.log
这是 .sh 文件:
#!/bin/bash
cd /home/ubuntu/ga_data/gaV4
python gaAPIWorkingVersion.py
echo "ran cron at" | tee -a "$tvaUpdater.log"
echo $(date) | tee -a "$tvaUpdater.log"
日志文件的输出是:
Traceback (most recent call last):
File "gaAPIWorkingVersion.py", line 13, in <module>
from apiclient.discovery import build
ImportError: No module named apiclient.discovery
我用 cron 调用一个 .sh 文件,而该 cron 又调用一个 .py 文件。我这样做是因为在 .sh 文件中我使用 cd 更改目录,因此我不必将 .py 脚本中的路径更改为绝对路径。这是因为我较大的 .py 脚本从它的目录中打开了几个文件。因此,我不是直接在 cron 中调用 python,而是通过首先调用 .sh 文件来间接调用。
当我自己直接运行 .sh 或 .py 脚本时,一切正常。只有当 cron 尝试这样做时,我才会收到上述错误。
如果我进入which python
终端,我会得到/home/ubuntu/anaconda3/bin/python
.
我尝试将该行添加到我的 .sh 文件中,如下所示:
#!/bin/bash
cd /home/ubuntu/ga_data/gaV4
python /home/ubuntu/anaconda3/bin/python gaAPIWorkingVersion.py
但这也引发了错误。
如何让 cron 使用正确版本的 python(在这种情况下为 anaconda)?
解决方案
尝试将您的 cron 更改为:
1 11 * * * /home/ubuntu/ga_data/gaV4/tva_gaApiUpdate.sh > /dev/null 2 >> tvaUpdater.log
和脚本
#!/bin/bash
cd /home/ubuntu/ga_data/gaV4
/home/ubuntu/anaconda3/bin/python gaAPIWorkingVersion.py
echo "ran cron at" | tee -a "$tvaUpdater.log"
echo $(date) | tee -a "$tvaUpdater.log"
确保直接运行 scipt 的用户与 cronjob 的用户相同。如果仍有问题,请检查使用 crontab 运行脚本时无法导入 Python MySQL 模块
推荐阅读
- java - While(true) 循环不会中断,永远运行
- scala - 每行不同的字数
- laravel - Symfony\Component\Translation\TranslatorInterface::setLocale($locale) 的声明必须与
- jquery - 从触摸屏输入的Jquery查找当前输入
- symfony - Symfony - CollectionType 字段中的唯一实体?
- javascript - React Native FlatList: Toggle State Value
- java - Android Studio: Tab indicator active
- node.js - Pkg 如何处理 ES6?
- javascript - 在 p5.js 中将照片设置为背景
- html - HTML/CSS - change button size with browser