在执行定时任务中时, 发现一个问题, 在我的shell脚本中, 执行python脚本, 发现总是报错, 最后发现时因为 执行环境没有切换正确导致的.
以下方式解决这种问题:
假如shell脚本: run.sh 中的内容如下:
#!/usr/bin/env bash
sh d1.sh > d1.log 2>&1 && \
sh d2.sh > d2.log 2>&1 && \
python e1.py > e1.log 2>&1 && \
python e2.py > e2.log 2>&1 && \
执行命令: crontab -e , 定制每天10点钟执行
00 10 * * * (cd /data/home/xxx; /usr/bin/bash -x run.sh > logger.log)
结果发现: 报错, 里面有一些包, 例如: pandas提示报错.
解决方案:
在linux环境中, 安装anaconda后, 我们安装自己的环境, 例如: py3.6, 那么我们一般进入linux后, 执行source activate py3.6 命令, 但是如果把这个命令, 拷贝到 run.sh脚本里面时无法生效的, 因为activate是一个文件, 必须使用绝对路径, 所以需要找到这个文件路径, 具体做法:
whereis activate
找到这个路径, 然后添加到run.sh中.
#!/usr/bin/env bash
source /data/home/xxx/xxx/bin/activate py3.6
sh d1.sh > d1.log 2>&1 && \
sh d2.sh > d2.log 2>&1 && \
python e1.py > e1.log 2>&1 && \
python e2.py > e2.log 2>&1 && \
添加到run.sh之后便可以切换到自定义的环境中去, 并且不会报错.