首先,在linux中crontab定时执行任务的时候,其环境变量并不是我们登陆用户时的环境变量,所以,我们在crontab定时执行任务的脚本里面,可以加入:
source /etc/profile
或者在脚本中首行:
#!/bin/bash -l
表示以login shell的方式登陆
或者在 /etc/crontab
修改对应的环境变量:
# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# 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
java程序log4j日志文件不显示,其实并不是没有显示,而是一般我们设置log4j文件的位置时都是以相对位置,一般会在crontab用户的home目录下面,我们可以在定时任务的执行脚本中执行java之前增加如下:
path=$(cd `dirname $0`;pwd)
cd ${path}
即可解决