问题背景
服务器的操作系统是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
还有在脚本中填写绝对路径执行,或者在在脚本中加载环境变量,这里就不做推荐了。
标签:bin,sbin,试试,crontab,usr,定时,local,环境变量 From: https://www.cnblogs.com/0x1001/p/17901549.html