工作需要负责项目的打包发布,一直手敲命令进行发布,费时费力。今天抽空学习了下shell脚本,以他人博客上的例子为参考,编写了两个shell脚本用于快速部署tomcat项目。
学习的博客原文链接如下:
========================================================================
使用方法,将两个shell脚本置于tomcat的bin目录下,chmod +x 为两个脚本给上可执行权限,直接用./deploy.sh或./restart.sh执行即可。
具体实现功能:
1.deploy.sh首先删除webapps目录下项目war包(tomcat会自动删除war包解压出来的文件夹)。
2.shutdown关闭tomcat,如若3s后还未关闭使用kill -9 杀死该进程。
3.将已上传到指定位置的war包部署到tomcat并通过restart.sh重启tomcat。
下面附上代码:
deploy.sh
#! /bin/sh bin=$(cd `dirname $0`;pwd) pid=`ps aux | grep tomcat | grep -v grep | grep -v deploy |grep ${bin} |awk '{printf $2}'` war=/data/kmss/resource/war/jl_server.war if [ ! -f "${war}" ]; then echo '请部署jl_server.war包至/data/kmss/resource/war/目录下'; fi echo "Deploy ${war##*/}..." if [ -f "${bin}/../webapps/jl_server.war" ];then echo "========rm jl_server.war=========" rm -rf ${bin}/../webapps/jl_server.war fi #关闭本项目的tomcat进程 if [ -n "${pid}" ];then echo "==========shutdown.sh============" ${bin}/shutdown.sh sleep 3 pid=`ps aux |grep tomcat | grep -v grep | grep -v deploy | grep ${bin} |awk '{printf $2}'` if [ -n "${pid}" ]; then echo "==========kill tomcat============" kill -9 ${pid} fi fi sleep 5 if [ -d "${bin}/../webapps/jl_server" ]; then echo "==========rm jl_server===========" rm -rf ${bin}/../webapps/jl_server fi #部署war包到tomcat mv ${war} ${bin}/../webapps echo "Restart tomcat..." exec ${bin}/restart.sh
tomcat启动时若war包被删除,tomcat会自动删除war包解压出来的文件夹,但若在删除过程中tomcat进程被关闭则文件夹可能未来得及被删除,所以在关闭进程后确认文件夹是否被删除。
参考博文中博主使用$1实现在输入命令时 使用参数定位war包位置,因为本项目只有单个war包需要上传所以直接在脚本中固定war包位置。如有需要可参考文章头部链接内博主博文。
restart.sh
#!/bin/sh echo "===========restart jl tomcat============="; bin=$(cd `dirname $0`;pwd) pid=`ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} |awk '{printf $2}'` dat=`date '+%Y-%m-%d %H:%M:%S'` echo "now time: $dat" echo "$pid" if [ -n "$pid" ]; then { echo ============shutdown.sh ================ $bin/shutdown.sh sleep 3 pid=`ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} |awk '{printf $2}'` if [ -n "$pid" ];then echo ============kill tomcat================= kill -9 $pid fi echo ============startup.sh ================= $bin/startup.sh } else echo ============startup.sh ================= ${bin}/startup.sh fi # $1代表在命令后输入的第一个参数 if [ "$1" == "-v" ]; then tail -f ${bin}/../logs/catalina.out fi
restart.sh启动使用./restart.sh用于重启tomcat,若tomcat进程原本关闭则直接启动。
在命令后加上-v 参数即可打印tomcat日志。 ./restart.sh -v
使用deploy.sh一键部署tomcat项目: