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
----------------------------------------------更多精彩请关注-------------------------------------