crontab 调用python定时任务不执行,原因彻底分析

一、问题
  最近,在centoos中设置一个定时任务,调用python,最后发现不执行或者说没有任何输出。

二、分析
  我的定时任务最开始是这样,python脚本,写入txt。
在这里插入图片描述
  查看/home/zeng目录生成了log.txt。可是,没有任何输出。去/var/log/查看cron日志,定时脚本按时执行了。
crontab 调用python定时任务不执行,原因彻底分析_第1张图片
  后来一想,python中使用了twilio包,这个安装在我的anaconda base环境下。于是,我加上一条语句
在这里插入图片描述
  还是没有任何输出。查找资料,发现大家一致认为crontab执行时的环境变量有问题。于是,我设置定时任务输出了一下crontab env看看。
crontab 调用python定时任务不执行,原因彻底分析_第2张图片
  crontab的环境变量/usr/bin,所以python是使用linux系统自带的。再查看crontab配置参数/etc/crontab。发现,这里面已经配置好了crontab执行时使用的环境变量来源。如果你不写明调动程序来源或者引入新的环境变量,他就从这里面寻找。
crontab 调用python定时任务不执行,原因彻底分析_第3张图片
  至此,也就明白了,crontab执行程序时会使用/usr/bin下的变量。默认用户是root,默认路径是/root/。所以,使用crontab要注意:

  • 1、定时语句或者在Shell文件里面获取环境变量值的路径写成绝对路径。写入文件和调用文件也要写成绝对路径。

  • 2、在即将执行的Shell脚本缺省的#!/bin/sh开头换行后的第一行加入两个环境变脸配置文件
    #!/bin/sh
    . /etc/profile
    . ~/.bash_profile

  • 3、在/etc/crontab中添加环境变量

三、解决
  最后,我设置如下执行,成功。只要你调用了anaconda下的python,就可以引用所有包了,不用使用source激活环境。
在这里插入图片描述

参考
https://blog.csdn.net/weixin_36343850/article/details/79217611

你可能感兴趣的:(linux)