1、应用场景
使用java project写了一个小程序,需要部署在linux下自动定时执行
java工程目录:
linux下部署的结构
2、shell脚本
#!/bin/bash
BIN_PATH=/usr/local/work/timertask
EXE_NAMe=com.hu.demo.MonthSettle
#RUN_NAME=run_monthsettle.sh
CLASSPATH=$CLASSPATH:.:${BIN_PATH}/
for file in ${BIN_PATH}/lib/*;
do CLASSPATH=${CLASSPATH}:$file;
done
export CLASSPATH
echo $CLASSPATH
if [ -z $1 ]
then
abc=`date -d last-month "+%Y-%m"`
else
abc=$1
fi
if [-z $2]
then
carrier_code=''
else
carrier_code=$2
fi
echo $abc
echo $carrier_code
/usr/java/jre/bin/java $EXE_NAMe $abc $carrier_code
(1) PATH环境变量。作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把 jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好 PATH变量后,就可以在任何目录下执行javac/java等工具了。
(2)CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的。我们 需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。
(3)JAVA_HOME环境变量。它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk
$PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的值。
在shell中一般用环境变量CLASSPATH定义,你可以直接指定jar,也可以指定目录,jdk1.5以后可以指定目录时自动寻找所有的jar和zip,其中export命令用于设置环境变量,将变量导出为全局变量。
所以如果没有这一句则shell脚本只能与class包放在同一个路径下,不然无法执行。
3、配置对应的linux下的crontab 定时任务
(1)、crontab -e 编辑crontab,crontab -l 查看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
#*/8 * * * * /usr/local/work/collection/run.sh >> /usr/local/work/collection/log.log