crontab定时任务不执行?那就试试最初的方法吧
问题背景
服务器的操作系统是centos7,没有python3,给它安装了一个miniconda3,然后发现 python 脚本手动执行没问题,放到定时任务里面就不执行了。
定位问题
查看/etc/crontab
文件,内容如下。
SHELL=/usr/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
可以看到它的环境变量是:
/sbin:/bin:/usr/sbin:/usr/bin
而系统的环境变量是:
echo $PATH
/usr/local/miniconda3/bin:/usr/local/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
也就是说,crontab没有获取到 python3 这个环境变量,进而导致脚本执行失败。
解决方法
方法1(此路不通):
修改/etc/crontab
文件,将其PATH内容修改和系统中的PATH指一样,然后执行systemctl restart crond
重启 cron,亲测,这种方法不行。
方法2(亲测可行):
将python3
的快捷方式添加到crontab
的环境变量中,亲测可行。
ln -s /usr/local/miniconda3/bin/python3.9 /usr/bin/python3
还有在脚本中填写绝对路径执行,或者在在脚本中加载环境变量,这里就不做推荐了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!