零、前言
在做java开发、运维、测试的工作中,跟springboot打交道的地方太多了。
怎么轻松管理一个springboot的项目部署呢?
借着这个来自作者junbaor的优秀实例,我们来看看一个shell脚本是如何炼成的。
一、v0.1版本
1.1 脚本实例
此版本来自github:https://github.com/junbaor/shell_script/blob/master/spring-boot.sh。
#!/bin/bash
1.2 使用示例
启动脚本:
sh
输出结果:
Start
报错示例:
sh springboot-manage_V0.
二、 v0.1 脚本解析
本实例脚本共分为几部分:
1、输入参数校验;
2、start方法、stop方法、restart方法、status方法
3、根据输入参数,调用启动方法
2.1 输入参数校验
2.1.1 代码片段
$2
注意:中括号([])两端至少要有一个空格。
2.1.2 参数解析
1、输入参数个数:2;
2、第一个参数,启停命令:start|stop|restart|status;
3、第二个参数,启动包:xxx.jar
在上一次的文章中(【shell】十分钟轻松入门),第一个示例脚本已经演示过
2.1.3 第一个示例脚本
vi 001.sh
#!/bin/sh
# author:姚毛毛
echo "Shell 传递参数实例!";
echo "第一个参数为:$1";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";
输出结果:
Shell 传递参数实例!
第一个参数为:1
参数个数为:5
传递的参数作为一个字符串显示:1 2 3 4 5
2.1.4 参数校验
# 将第二个参数赋值给变量SpringBoot
2.1.5 提示文字的解析
在前面的文章《来点有颜色的字符》的一文中,已经说过了,这里复制过来。
echo -e
分析下这串字符串的含义:
1) \e[31;43;1m
这段代码表示在 "\e["(转义开方括号)和 "m" 之间数值来设置各种效果,不同的数值代表不同的效果,可以多种数字组合起来用,数字之间用分号隔开。
31;43;1
对应的分别是字符颜色代码;背景颜色代码;特效代码
,分号分隔。
2)空格一格后写入我们要输出颜色的字符c
。
3)在字符结尾部分需要加上\e[0m来表示颜色方案结束,否则后面的提示符都会变颜色。
字符串中的\e
也都可以替换成\033
,如echo -e "\033[31;43;1m c \033[0m to continue"
,效果是一样的。
2.2 启停函数 start|stop|restart|status
2.2.1 start 启动
代码片段:
function
主要脚本:
1、查看进程
# 查看进程数命令
count=`ps -ef |grep java|grep $SpringBoot|grep -v grep|wc -l`
主要命令是ps -ef |grep java|grep $SpringBoot
,只是用wc -l做了个统计。
2、后台不中断启动
这个命令在上篇文章中《【shell】十分钟入门》已经说过。
null
java -jar $SpringBoot 这个就不用说了。
2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null
nohup 为no hang up,不人为中断会一直运行,一般与&一起用。
2.2.2 stop 停止
代码片段:
function stop()
{
echo "Stop $SpringBoot"
boot_id=`ps -ef |grep java|grep $SpringBoot|grep -v grep|awk '{print $2}'`
count=`ps -ef |grep java|grep $SpringBoot|grep -v grep|wc -l`
if [ $count != 0 ];then
kill $boot_id
count=`ps -ef |grep java|grep $SpringBoot|grep -v grep|wc -l`
boot_id=`ps -ef |grep java|grep $SpringBoot|grep -v grep|awk '{print $2}'`
kill -9 $boot_id
fi
}
主要脚本:
1、查找进程id
# 查找进程id,赋值给boot_id
boot_id=`ps -ef |grep java|grep $SpringBoot|grep -v grep|awk '{print $2}'`
2、关闭进程
kill -9
2.2.3 restart
代码片段:
function restart()
主要脚本:
1、睡眠2秒
2
在调用停止方法后,等待2秒,再调用启动脚本,防止启动脚本执行时,进程还未关闭。
2.2.4 status
代码片段:
function
主要脚本:
1、进程统计
count=`
这个之前已经说过,根据jar包名称查找进程,统计其数量。
2.3 case 调用
代码片段:
case
初看这个脚本可能有点一头雾水,但是看下case的标准语法就会明白了。
case的条件句式:
case 值
所以解读下这段脚本,就是只有第一个输入变量是 start|stop|restart|status的时候,才执行对应的方法。
否则,给出提示:
sh {
三、v0.2 脚本实例
对v0.1的脚本进行些许个性化改动。
3.1 脚本
#! /usr/bin/bash
脚本已上传github:https://github.com/kiok1210/shell_learn。
3.2 执行示例
root@yaomm halo]# sh springboot-manage_V0
3.3 v0.2 版本改动
1、添加了注释;
2、主要改动:
start 添加了jvm参数;
stop 添加了kill -15 命令;
status 输出更多信息。
四、后记
写这篇文章花了两三个小时,不过感觉自己也收获很多。
如果shell的入门也分境界的话,我想我应该是炼气第二层了。
但是炼气九层,上面还有筑基、金丹、元婴、神游、渡劫、飞升这些境界呢。
总之,继续前行,继续努力吧。
共勉!