背景:写一个小工具,定时统计一些信息,并将统计结果发送给相关人员
方案:代码部署到ubuntu上;采用crontab设置定时任务去执行程序,获取需要统计的信息,并将结果写到excel中,然后通过mail 将邮件发送出去。
1、准备好统计信息,并将结果写到excel中的代码
2、打成jar包,用来上传到服务器中运行
这里的代码就不做说明的,很简单。我是采用maven管理jar包的,自然就使用了mvn命令打jar包
要想代码在服务器中运行,肯定的有jdk环境,所以在代码上传之前,先把服务器上相关环境配置好
1、安装配置jdk
#set Java environment
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
配置完之后,保存退出,cat /ect/profile ,看一下添加的内容是否添加成功;
做完这些之后,执行命令:java -version ,若能正常显示jdk版本,说明前面的配置成功了。
2、部署代码
进入到想要放置项目代码的目录下,再创建一个目录,使用ftp,将我项目的jar包传到该目录下;
执行命令: jar -xvf xxx.jar ,解压项目代码到当前路径下
准备执行代码的脚本,脚本放置的目录前往要注意;如下,我的项目根目录是bugProject,要执行的代码是bugProject\com下的Test , 项目所依赖的jar包都放在bugProject\lib目录下;
我的执行脚本就放在了bugProject下,和com,lib是同级的 。这里的路径一定要注意,不然后面执行脚本的时候,会报各种错误(比如:找不到或无法加载主类等)。
#Java程序所在的目录(classes的上一级目录)
APP_HOME=/home/ada/bugProject
#需要启动的Java主程序(main方法类)
APP_MAINCLASS=com/Test
echo $APP_MAINCLASS
#拼凑完整的classpath参数,包括指定lib目录下所有的jar
CLASSPATH=$APP_HOME
for i in "$APP_HOME"/lib/*.jar; do
CLASSPATH="$CLASSPATH":"$i"
done
echo $CLASSPATH
java -classpath $CLASSPATH $APP_MAINCLASS
执行代码的脚本准备好之后,执行脚本,看看程序是否正常运行了。若未能正常运行,就得一一排查问题了。
3、安装mailutils(ubuntu系统)
使用mail命令来发送邮件,得先按钮mailutils
安装成功后,就可以通过以下命令发送邮件了([email protected]就是收件人邮箱)。
echo '这里是邮件内容.' | mail -s "这里是邮件主题" [email protected]
注意:若是想使用外部smtp发送网络邮件,还需要安装heirloom-mailx
#设置发送邮箱
set [email protected]
#设置smtp服务器和端口
set smtp=smtp.163.com:25
#设置用户名,记得加域名啊
set [email protected]
#授权码
set smtp-auth-password=xxxxxx4444
#认证方式
set smtp-auth=login
配置完后执行以下source命令,让该文件的修改立即生效。这个时候收到邮件后,就会发现发件人不一样了。
执行命令:echo "这里输入你邮件内容" | mail -s "邮件标题" -a 附件的路径 [email protected],[email protected]
就可以携带附件将邮件发送给多人
执行命令:mail -s "邮件标题" -a 附件的路径 [email protected],[email protected] < mailMessage.txt
至此发送邮件的问题解决了
4、设置定时任务
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。
由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
/sbin/service cron start //启动服务
/sbin/service cron stop //关闭服务
/sbin/service cron restart //重启服务
/sbin/service cron reload //重新载入配置
cron常用命令
重启cron:/etc/init.d/cron restart
查看cron:crontab -l
查看cron的状态(开启或关闭):service cron status
打开cron文件:crontab -e
查看cron日志:/var/log/syslog
crontab时间格式说明
minute(分):可以设置0-59分
hour(小时):可以设置0-23小时
day of month(日期):可以设置1-31号
month(月份):可以设置1-12月
day of week(星期):可以设置0-7星期几,其中0和7都代表星期天,也可以使用名称来表示星期天到星期一,例如sun表示星期天,mon表示星期一
#时间格式不正确的时候,在退出crontab编辑时会有提示;例如01 24 * * * 这种就是错误的,因为不存在24点01分这样的时间
cron语法
"*"代表取值范围内的数字
"/"代表"每"
"-"代表从某个数字到某个数字
","分开几个离散的数字
nano编辑器使用规则:
ctrl +0 : 保存
回车
ctrl + x : 退出
选择vi编辑器,就和平时的vi编辑操作一样
编写定时命令: 59 23 * * 0 date
若是定时执行脚本,则:59 23 * * 0 bash /root/crontabTimer/timer.sh
保存退出,crontal -l 看一下编辑是否成功。
以上需要配置的工具等都准备好了,接下来就是结合起来了。
我是在我的发送邮件的脚本中,直接添加了执行运行程序的脚本;然后在定时任务中调用我的发送邮件的脚本就可以了。