一、Shell脚本
#!/bin/bash
#jar包所在路径
JAR_HOME=/usr/demo/quartz-adg-0.0.1-SNAPSHOT.jar
LOG_NAME=adg
#输入错误时,提示内容
usage() {
echo "输入格式: sh launcher.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $JAR_HOME|grep -v grep|awk '{print $2}'`
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动
start(){
is_exist
if [ $? -eq 0 ]; then
echo "${JAR_HOME} is already running. pid=${pid}"
else
nohup java -jar ${JAR_HOME} >/usr/demo/${LOG_NAME}.out 2>&1 &
tail -40f adg.out
echo "[start----ok!]"
fi
}
#停止
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
echo "[stop----down!]"
else
echo "${JAR_HOME} is not running"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${JAR_HOME} is running. Pid is ${pid}"
else
echo "${JAR_HOME} is NOT running."
fi
}
#重启
restart(){
stop
sleep 5
start
echo "[ok!]"
}
#根据输入参数,选择执行对应方法,其他则执行usage
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
二、效果图示
三、脚本说明
1、 ps -ef|grep
ps命令将某个进程显示出来;
grep命令是查找;
中间的|是管道命令 是指ps命令与grep同时执行;
脚本中 ps -ef|grep /usr/demo/quartz-adg-0.0.1-SNAPSHOT.jar 就是用来检查该java进程是否存在;
2、grep -v grep
在文档中过滤掉包含有grep字符的行。
3、awk
是一种处理文本文件的语言,是一个强大的文本分析工具。
后续再详细介绍。
在这里 awk '{print $2}' 是指每行按空格或TAB分割,输出文本中的2项,也就是 5429。
4、[ -z "${pid}" ]
-z检测pid是否存在,不存在返回真,存在返回假。
四、遇到的问题
- 端口被占用
(sudo netstat -antup)如果是root账户 输入netstat -antup 查看对应端口的PID,然后执行 kill -9 该Pid 即可;
- PID
线程进程都会有自己的ID,这个ID就叫做PID,PID是不特指进程ID,线程ID也可以叫做PID。