linux-crontab之环境变量的问题
前言
在linux服务器上,计划任务基本都是crontab进行管理的。但是有些脚本手动运行都很正常,一放到crontab里面就不执行了。这一般都是环境变量的问题引起的。
环境变量
一般设置环境变量的时候,Linux会在/etc/profile里面配置,这样子用户登录,读取这个文件的时候就会读取到配置文件,所有正常的bash shell登录都可以执行我们的脚本。但是crontab就不一样了,在红帽系列的Linux上面,可以在/etc/crontab下发现有重新设置环境变量。
cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
因此,如果需要调用命令没有在上面的PATH环境路径下就需要写全路径了。而针对需要读取变量才能执行的程序的比如java的JAVA_HOME,最好在自己的脚本里面定义一下。
比较简单方便的方法是直接source /etc/profile ,来获取profile里面的变量。