脚本代码
#!/bin/bash
# by yyk
##初始化参数
#服务名
SERVICE_NAME=(
oauth
gateway
feign
user
collect
dataapp
analysis
simulation
devops
)
#服务启动包所在的目录,根据实际地址设置
SERVICE_PATH=(
/usr/local/1.oauth/
/usr/local/2.gateway/
/usr/local/3.feign/
/usr/local/4.user/
/usr/local/5.collect/
/usr/local/6.dataapp/
/usr/local/7.analysis/
/usr/local/8.simulation/
/usr/local/9.devops/
)
#服务启动包
SERVICE_PACKAGE=(
oauth_20210625_74ef12e6.jar
gateway_20210625_74ef12e6.jar
feign_20210625_74ef12e6.jar
user_20210625_74ef12e6.jar
hurys-bigdata-collect-20210903.jar
dataapp_20210625_74ef12e6.jar
analysis_20210625_725ec3d7.jar
simulation_20210625_74ef12e6.jar
devops_20210625_74ef12e6.jar
)
# 脚本提示信息
tips(){
echo "-------------------------------------"
echo "日志记入时间:" $(date +"%Y-%m-%d %H:%M:%S") >> nohup.out
echo ""
echo "Version:1.0"
echo "Author:yyk"
echo "Comment:"
echo " 命令举例:sh philicube_start.sh - status"
echo " 当前支持如下服务的启动:gateway、auth、redis..."
echo " 启动参数:"
echo " -status -查看平台所有服务运行状态"
echo " -start -启动平台所有服务"
echo " -stop -停止平台所有服务"
echo " -restart -重启平台所有服务"
echo " -gateway -重启网关服务"
echo " -auth -重启权限服务"
echo " -exchange -重启实时服务"
echo " -eslog -重启日志服务"
echo " -message -重启消息服务"
echo " -ws -重启PhiliWsGateway服务"
echo ""
echo "-------------------------------------"
}
#查看状态
status(){
echo ""
echo "---------查看状态 开始执行 ...-----------"
for((i=0;i<${#SERVICE_NAME[@]};i++))
do
num=$((i+1))
service_name=${SERVICE_NAME[i]}
#查找pid之ps方法
service_pid=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
if [ -z "$service_pid" ]; then
echo "--- 服务$num: 【$service_name】未运行!!!"
else
echo "--- 服务$num: 【$service_name】【$service_pid】运行中..."
fi
done
echo "---------查看状态 执行完毕 !!!-----------"
echo ""
}
#一键启动
start(){
echo ""
echo "---------启动程序 开始执行 ...-----------"
for((i=0;i<${#SERVICE_NAME[@]};i++))
do
num=$((i+1))
service_name=${SERVICE_NAME[i]}
service_path=${SERVICE_PATH[i]}
service_package=${SERVICE_PACKAGE[i]}
echo "---服务$num:【$service_name】开始启动 ..."
echo "--- 服务目录地址为: $service_path"
echo "--- 服务安装程序为: $service_package"
cd "$service_path" || return
# path=`pwd`
# echo "--- 当前目录地址为:$path"
##创建日志目录及文件
echo "--- 初始化日志目录及文件..."
TODAY=$(date +%Y-%m-%d)
LOG_NAME="log-$TODAY.txt"
FULL_LOG_NAME=logs/$LOG_NAME
##创建文件夹
if [ ! -d logs ];then
mkdir logs
fi
##创建文件
if [ ! -e "$FULL_LOG_NAME" ];then
touch "$FULL_LOG_NAME"
fi
service_pid=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
if [ -n "$service_pid" ];then
echo "--- $service_name进程存在,无需启动。当前进程为:$service_pid"
else
#启动服务
echo "--- $service_name进程不存在,启动服务 ..."
#获取文件名后缀,判定文件类型
service_package=${SERVICE_PACKAGE[i]}
extension=$(dealFileName "$service_package")
if [ $extension = "jar" ];then
#运行java服务并在后台执行
nohup java -jar -Xmx512m -Xms512m "$service_package" --info >"$FULL_LOG_NAME" &
elif [ "$extension" = "sh" ]; then
#打开终端,执行命令
gnome-terminal -x bash -c "./$service_package;"
#睡1秒,等程序反应,否则可能拿不到pid
sleep 1
elif [ "$extension" = "out" ]; then
#exec bash;是让打开的终端在执行完脚本后不关闭
gnome-terminal -x bash -c "./$service_package;exec bash;"
#睡1秒,等程序反应,否则可能拿不到pid
sleep 1
else
echo " 未识别的文件类型,文件类型为:【$extension】"
fi
#判断服务启动成功
service_pid_new=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
until [ -n "$service_pid_new" ]
do
service_pid_new=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
done
echo "--- $service_name 启动完毕!!!当前进程为:$service_pid_new"
fi
sleep 1
done
echo "---------启动程序 执行完毕 !!!-----------"
echo ""
}
#一键停止
stop(){
echo ""
echo "---------停止程序 开始执行 ...-----------"
for((i=0;i<${#SERVICE_NAME[@]};i++))
do
num=$((i+1))
service_name=${SERVICE_NAME[i]}
service_pid=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
if [ "$service_pid" == "" ]; then
echo "--- 服务$num: 【$service_name】进程不存在或已停止运行!!!"
else
kill -9 "$service_pid"
echo "--- 服务$num: 【$service_name】停止成功。"
fi
sleep 1
done
echo "---------停止程序 执行完毕 !!!-----------"
echo ""
}
#一键重启
restart(){
echo ""
echo "---------重启 开始执行 ...-----------"
stop
sleep 1
start
sleep 1
status
echo "---------重启 执行完毕 !!!-----------"
echo ""
}
#重启某服务处理函数
reservice(){
echo "--- 获取参数 ..."
service_name=$1
service_path=$2
service_package=$3
echo "--- 服务名称为: 【$service_name】"
echo "--- 服务目录地址为:$service_path"
echo "--- 服务安装程序为:$service_package"
#到启动程序目录
cd "$service_path" || return
# path=`pwd`
# echo "--- 当前目录地址为:$path"
#创建日志目录及文件
echo "--- 初始化日志目录及文件..."
TODAY=$(date +%Y-%m-%d)
LOG_NAME="log-$TODAY.txt"
FULL_LOG_NAME=logs/$LOG_NAME
#创建文件夹
if [ ! -d logs ];then
mkdir logs
fi
#创建文件
if [ ! -e "$FULL_LOG_NAME" ];then
touch "$FULL_LOG_NAME"
fi
#检查服务是否存在进程,有则杀掉
pid=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
if [ -n "$pid" ]; then
echo "--- 服务进程存在,pid=[$pid]关闭当前进程 ..."
kill -9 "$pid"
echo "--- 清理进程后,启动 ..."
else
echo "--- 服务进程不存在 ..."
fi
#获取文件名后缀,判定文件类型
extension=$(dealFileName "$service_package")
if [ $extension = "jar" ];then
#运行java服务并在后台执行
nohup java -jar -Xmx512m -Xms512m "$service_package" --info >"$FULL_LOG_NAME" &
elif [ "$extension" = "sh" ]; then
#打开终端,执行命令
gnome-terminal -x bash -c "./$service_package;"
#睡1秒,等程序反应,否则可能拿不到pid
sleep 1
elif [ "$extension" = "out" ]; then
#exec bash;是让打开的终端在执行完脚本后不关闭
gnome-terminal -x bash -c "./$service_package;exec bash;"
#睡1秒,等程序反应,否则可能拿不到pid
sleep 1
else
echo " 未识别的文件类型,文件类型为:【$extension】"
fi
#service_pid_new=$(ps -ef | grep "$service_name" | grep -v "grep" | awk '{print $2}')
service_pid_new=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
until [ -n "$service_pid_new" ]
do
service_pid_new=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
done
echo "--- 服务已启动,当前进程为:$service_pid_new"
}
#解析传入的文件名,获取后缀
#支持带路径,格式如:/the/path/foo.txt
# 返回值对应文件类型 1 jar 2 sh 3 out
dealFileName(){
fullfile=$1
dir=$(dirname "$fullfile")
fullname=$(basename "$fullfile")
filename=$(echo "$fullname" | cut -d . -f1)
extension=$(echo "$fullname" | cut -d . -f2)
# echo " dir = $dir"
# echo " fullname = $fullname"
# echo " filename = $filename"
# echo " extension = $extension"
if [ "$extension" = "jar" ];then
echo "jar"
elif [ "$extension" = "sh" ]; then
echo "sh"
elif [ "$extension" = "out" ]; then
echo "out"
else
echo "other"
fi
}
#网关服务
gateway(){
echo ""
echo "---------网关服务 程序开始执行 ... -----------"
service_name=${SERVICE_NAME[0]}
service_path=${SERVICE_PATH[0]}
service_package=${SERVICE_PACKAGE[0]}
reservice "$service_name" "$service_path" "$service_package"
echo "---------网关服务 程序执行完毕 !!!-----------"
echo ""
}
#权限服务
auth(){
echo ""
echo "---------权限服务 程序开始执行 ... -----------"
service_name=${SERVICE_NAME[1]}
service_path=${SERVICE_PATH[1]}
service_package=${SERVICE_PACKAGE[1]}
reservice "$service_name" "$service_path" "$service_package"
echo "---------权限服务 程序执行完毕 !!!-----------"
echo ""
}
#实时服务
exchange(){
echo ""
echo "---------实时服务 程序开始执行 ... -----------"
service_name=${SERVICE_NAME[2]}
service_path=${SERVICE_PATH[2]}
service_package=${SERVICE_PACKAGE[2]}
reservice "$service_name" "$service_path" "$service_package"
echo "---------实时服务 程序执行完毕 !!! -----------"
echo ""
}
#日志服务
eslog(){
echo ""
echo "---------日志服务 程序开始执行 ... -----------"
service_name=${SERVICE_NAME[3]}
service_path=${SERVICE_PATH[3]}
service_package=${SERVICE_PACKAGE[3]}
reservice "$service_name" "$service_path" "$service_package"
echo "---------日志服务 程序执行完毕 !!!-----------"
echo ""
}
#消息服务
message(){
echo ""
echo "---------消息服务 程序开始执行 ... -----------"
service_name=${SERVICE_NAME[4]}
service_path=${SERVICE_PATH[4]}
service_package=${SERVICE_PACKAGE[4]}
reservice "$service_name" "$service_path" "$service_package"
echo "---------消息服务 程序执行完毕 !!!-----------"
echo ""
}
#消息服务
ws(){
echo ""
echo "---------消息服务 程序开始执行 ... -----------"
service_name=${SERVICE_NAME[5]}
service_path=${SERVICE_PATH[5]}
service_package=${SERVICE_PACKAGE[5]}
reservice "$service_name" "$service_path" "$service_package"
echo "---------消息服务 程序执行完毕 !!!-----------"
echo ""
}
#终端输入参数调用
case "$1" in
"-status")
status
;;
"-start")
start
;;
"-stop")
stop
;;
"-restart")
restart
;;
"-gateway")
gateway
;;
"-auth")
auth
;;
"-exchange")
exchange
;;
"-eslog")
eslog
;;
"-message")
message
;;
"-ws")
ws
;;
*)
tips
;;
esac
exit 0;