新建shell脚本文件并添加以下内容,我一般以项目名来命名,例如项目名为my-project,shell脚本文件则命名为my-project.sh
#jar包的名称
PROJECT_NAME=my-project
#控制台日志位置
CONSOLE_PATH=$HOME/$PROJECT_NAME.log
#端口号,根据端口号确定PID
PORT=8010
#启动命令所在目录
HOME='./'
#查询监听PORT端口的程序,awk:过滤文本;cut-d / -f 1:以“/"分开的 第一个域
pid=`netstat -anp|grep :$PORT|awk '{printf $7}'|cut -d/ -f1`
#启动
start(){
#判断pid非空,then
if [ -n "$pid" ]; then
echo "server already start,pid:$pid"
return 0
fi
#进入命令所在目录
cd $HOME
# nohup方式启动jar并将日志重定向到log中,2>&1:将stderr重定向到stdout中 &:放后台执行
nohup java -jar $PROJECT_NAME.jar > $CONSOLE_PATH 2>&1 &
echo "start at port:$PORT"
}
#停止
stop(){
#判断pid非空,then
if [ -z "$pid" ]; then
echo "not find program on port:$PORT"
return 0
fi
#结束进程
kill -9 $pid
echo "kill program ,pid:$pid"
}
#查看状态
status(){
#判断pid非空,then
if [ -z "$pid" ]; then
echo "not find program on port:$PORT"
else
echo "program is running, pid:$pid"
fi
}
#查看控制台输出
console(){
#判断pid非空,then
if [ -z "$pid" ]; then
echo "not find program on port:$PORT"
return 0
fi
tail -f $CONSOLE_PATH
}
#判断执行那个函数
case $1 in
start )
start
;;
stop )
stop
;;
status )
status
;;
console )
console
;;
*)
echo "Usage: (start|stop|status|console)"
;;
esac
exit 0
命令示例:
启动项目: ./my-project.sh start
停止项目:./my-project.sh stop
查看状态:./my-project.sh status
查看控制台日志: ./my-project.sh console