Python运维与数据分析生活不易 我用pythonPython 运维

Linux crontab中不能执行Python脚本

2017-05-12  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读