标签:描述 使用说明 shel out 执行 span success 提示 就是
APP_HOME=/home/sxylz/ggfw
APP_NAME=$1
# 使用说明,用来提示输入参数
usage() {
#Usage[可选内容]
echo "Usage: sh boot [APP_NAME] [start|stop|restart|status]"
exit 1
}
# 检查程序是否在运行
#awk ‘{print $2}‘提取第二列
is_exist(){
# 获取PID
PID=$(ps -ef |grep ${APP_NAME} | grep -v $0 |grep -v grep |awk ‘{print $2}‘)
# -z "${pid}"判断pid是否存在,如果不存在返回1,存在返回0
# -z代表空串
if [ -z "${PID}" ]; then
# 如果进程不存在返回1
return 1
else
# 进程存在返回0
return 0
fi
}
# 定义启动程序函数
start(){
is_exist
#if [ $? -eq 0 ]该语句是什么含义? 解:代表上一个命令执行后的退出状态
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running, PID=${PID}"
else
#shell中“>/dev/null 2>&1”详解
#shell中可能经常能看到:>/dev/null 2>&1
#命令的结果可以通过 %> 的形式来定义输出,其中 %> 代表文件描述符
#我们将这个命令组合:“>/dev/null 2>&1” 拆为四部分来分析下:
#1:> 代表重定向到哪里,例如:echo "123" > /home/123.txt
#2:首先 0> 表示stdin标准输入; 1> 表示stdout标准输出; 2> 表示stderr错误输出;
#3:/dev/null 代表空设备文件
#4:& 可以理解为是"等同于"的意思,2>&1,即表示2的输出重定向等同于1
#5:1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于 "1>/dev/null"
#因此,>/dev/null 2>&1 也可以写成“1> /dev/null 2> &1”
#那么本文标题的语句执行过程为:
#1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
#2>&1 :接着,将标准错误输出重定向 到 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
nohup java -jar ${APP_HOME}/${APP_NAME} >/dev/null 2>&1 &
PID=$(echo $!)
#pid=$!就是这个目录名后面跟上这个脚本的pid号
echo "${APP_NAME} start success, PID=$!"
fi
}
# 停止进程函数
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 ${PID}
echo "${APP_NAME} process stop, PID=${PID}"
else
echo "There is not the process of ${APP_NAME}"
fi
}
# 重启进程函数
restart(){
stop
start
}
# 查看进程状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running, PID=${PID}"
else
echo "There is not the process of ${APP_NAME}"
fi
}
case $2 in
"start")
start
;;
"stop")
stop
;;
"restart")
restart
;;
"status")
status
;;
*)
usage
;;
#esac是和case配对的bai,是多路分支的语句,类似于C中的 switch/case 语句
esac
exit 0
标签:描述 使用说明 shel out 执行 span success 提示 就是
原文地址:https://www.cnblogs.com/curedfisher/p/13266660.html