Linux crontab中不能执行Python脚本

作者: 菩提老鹰 | 来源:发表于2017-05-12 15:13 被阅读445次

    Linux crontab中不能执行Python脚本

    欢迎访问个人博客

    >>摘要

    在Linux下的crontab定时执行shell脚本和Python的时候存在一定的问题,导致某些系统变量取不到,以至于定时计划不能很好的执行。究其原因是因为crontab不能取到全部的环境变量


    >>依赖环境

    [root@i-vowirco9 bin]# cat /etc/redhat-release
    CentOS release 6.8 (Final)
    
    [root@i-vowirco9 bin]# python -V
    Python 2.6.6
    
    [root@i-vowirco9 bin]# pip -V
    pip 9.0.1 from /usr/lib/python2.6/site-packages/pip-9.0.1-py2.6.egg (python 2.6)
    

    >>验证crontab取到的环境变量

    全新主机上面编写如下shell脚本测试crontab服务可获取到的环境变量

    ## 脚本内容
    
    vim  /root/bin/test_crontab_env.sh
    
        #!/usr/bin/env bash
        #-*- coding: utf-8 -*-
        #Author: Colin
        #Date: 2017-05-12
        #Desc: 测试crontab服务可获取到的环境变量
        #
    
        /usr/bin/env > /tmp/colin_env.log
    
    
    ## 赋权限
    
        chmod a+x /root/bin/test_crontab_env.sh
    

    配置crontab定制执行

    ## 配置crontab
    
    crontab -e
    
        */2 * * * * /root/bin/test_crontab_env.sh
    
    
    两分钟之后查看/tmp/colin_env.log日志
    
    [root@i-vowirco9 bin]# cat /tmp/colin_env.log
    SHELL=/bin/sh
    USER=root
    PATH=/usr/bin:/bin
    _=/usr/bin/env
    PWD=/root
    LANG=en_US.utf8
    HOME=/root
    SHLVL=2
    LOGNAME=root
    LC_CTYPE=en_US.utf8
    
    
    

    从上面的结果可以看到,crontab运行环境中取到的系统环境变量少之又少


    >>解决之道

    >>>用Shell执行Python脚本

    示例如下:

    ## 配置所需系统变量
    [root@i-vowirco9 bin]# tail -2 /etc/profile
    ## add for test
    export COLINNAME='Colin'
    
    
    ## 测试脚本
    
        vim /root/bin/get_crontab_variable.sh
        #!/usr/bin/env bash
        #-*- coding: utf-8 -*-
        #Author: Colin
        #Date: 2017-05-12
        #Desc: 测试crontab服务获取指定的变量
        #
    
        ## 关键所在
        source /etc/profile
    
        echo "The given variable is: ${COLINNAME}" > /tmp/colin_env_profile.log
    
    ## 执行脚本
    
        crontab 配置执行脚本,观察输出日志内容
    
        cat /tmp/colin_env_profile.log
    
            The given variable is: Colin
    
    ## 备注
            
        如果注释小 source 所在行,执行脚本,则获取不到COLINNAME变量值
    
        cat /tmp/colin_env_profile.log
    
            The given variable is:
    

    >>>crontab 配置所需变量

    示例如下:

    
    ## 在crontab中直接配置变量 如下
    
        [root@i-vowirco9 bin]# crontab -l |head -1
        COLINNAME='Colin'
    
    ## 测试脚本 /root/bin/get_crontab_variable_v2.sh 只有一行内容,注意没有source那行
    
        [root@i-vowirco9 bin]# cat get_crontab_variable_v2.sh
        #!/usr/bin/env bash
        #-*- coding: utf-8 -*-
        #Author: Colin
        #Date: 2017-05-12
        #Desc: 测试crontab服务获取指定的变量
        #
    
        echo "The given variable is: ${COLINNAME}" > /tmp/colin_env_crontab.log
    
    ## 执行脚本
    
        crontab 配置执行脚本,观察输出日志内容
    
        cat /tmp/colin_env_crontab.log
    
            The given variable is: Colin
    

    ----------------------------------------------更多精彩请关注-------------------------------------

    公众号: DailyJobOps

    相关文章

      网友评论

      • 忆秋之禾:以前centos6的时候也遇到这个问题,当时没整明白.换7之后就没发现这个问题

      本文标题:Linux crontab中不能执行Python脚本

      本文链接:https://www.haomeiwen.com/subject/tvgztxtx.html