Linux Centos7 使用定时任务crontab 跑python3脚本 报错报错缺少库函数 ImportError: No module named XXXX,命令行执行无报错解决方案

错误描述:

centos7使用定时任务crontab跑python脚本,报错 ImportError: No module named XXXX

提示找不到模块需要导包。

但是不在定时任务里面执行,直接用python3 命令执行py脚本的时候是没问题,而且之前也pip过类似的模块。

 

原因分析:

应为centos7 linux环境安装的时候是默认安装了python2.几的版本,所以定时任务cron默认使用的是py2的环境

#crontab -e

查看下我的定时任务配置

下面我们来解析下:

29 09 * * *  这个没啥好说的,每天9点29分执行定时任务

nohup  表示后台运行

python3 -u  /usr/python/sgl_shell/gp_notice/gp.py  表示使用python3 去执行gp.py这个脚本   (问题就出在这)

>> /usr/python/sgl_shell/gp_notice/shell_log/run.log 2>&1  这个也没啥好说的,就是指定日志输出位置

 

解决方法:

问题就出在第三行用python3去执行py脚本那里

定时任务里需要使用python3命令的时候需要使用全路径名

如:/usr/local/bin/python3 -u  /usr/python/sgl_shell/gp_notice/gp.py

或者第一行加一个环境指定

如:

#!/usr/local/bin/python3

 xxxx  python3 -u  /usr/python/sgl_shell/gp_notice/gp.py

这样配置后,执行定时任务脚本的时候就会以python3去执行脚本了,而不是使用系统默认的python2

 

注意:但是光像上面那样改完还是会报错,因为定时任务里环境里crontab还是感知不到相关的环境变量

即使你使用python3命令去执行了还是找不到模块包的位置,需要手动导入下环境变量

需要再加一个命令:

source /etc/profile; (分号不能少)

如:

#!/usr/local/bin/python3

 xxxx source /etc/profile; /usr/local/bin/python3 -u  /usr/python/sgl_shell/gp_notice/gp.py

这样就可以正常执行了,且不会再报少包少模块错误!

 

下面附上我的完整配置:

#!/usr/local/bin/python3
29 09 * * *  source /etc/profile; nohup /usr/local/bin/python3 -u  /usr/python/sgl_shell/gp_notice/gp.py >> /usr/python/sgl_shell/gp_notice/shell_log/run.log 2>&1

 

最后附上centos7 常用设置定时任务命令:

设置定时任务
方法一:vi /etc/crontab

方法二:(推荐)
直接用crontab -e,不需要指定用户,如果是root权限,默认是root定时的

 

systemctl start crond.service           启动服务

systemctl stop crond.service           关闭服务  

systemctl restart crond.service       重启服务  

systemctl reload crond.service       重新载入配置

systemctl status crond.service       服务是否运行

你可能感兴趣的:(Python)