Linux crontab中不能執(zhí)行Python腳本
>>摘要
在Linux下的crontab定時執(zhí)行shell腳本和Python的時候存在一定的問題,導致某些系統(tǒng)變量取不到,以至于定時計劃不能很好的執(zhí)行。究其原因是因為crontab不能取到全部的環(huán)境變量
>>依賴環(huán)境
[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取到的環(huán)境變量
全新主機上面編寫如下shell腳本測試crontab服務可獲取到的環(huán)境變量
## 腳本內容
vim /root/bin/test_crontab_env.sh
#!/usr/bin/env bash
#-*- coding: utf-8 -*-
#Author: Colin
#Date: 2017-05-12
#Desc: 測試crontab服務可獲取到的環(huán)境變量
#
/usr/bin/env > /tmp/colin_env.log
## 賦權限
chmod a+x /root/bin/test_crontab_env.sh
配置crontab定制執(zhí)行
## 配置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運行環(huán)境中取到的系統(tǒng)環(huán)境變量少之又少
>>解決之道
>>>用Shell執(zhí)行Python腳本
示例如下:
## 配置所需系統(tǒng)變量
[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
## 執(zhí)行腳本
crontab 配置執(zhí)行腳本,觀察輸出日志內容
cat /tmp/colin_env_profile.log
The given variable is: Colin
## 備注
如果注釋小 source 所在行,執(zhí)行腳本僻爽,則獲取不到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
## 執(zhí)行腳本
crontab 配置執(zhí)行腳本贾惦,觀察輸出日志內容
cat /tmp/colin_env_crontab.log
The given variable is: Colin
----------------------------------------------更多精彩請關注-------------------------------------