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
需要再加一个命令:
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 服务是否运行