动态部署springboot项目都Linux服务器上

一、编写脚本(代码如下)

#一些常量
PORT=8888
APP_NAME=blog.jar
CUR_PATH=$pwd
#配置文件所在目录
APPFILE_PATH="/usr/local/java"
 
 
#第一步先杀死占用后端端口的进程,一般后端端口是8011,对应下句port的值
echo "端口号为${PORT}"
echo "启动jar包名称${APP_NAME}"
echo "启动资源路径${APPFILE_PATH}"
#根据端口号查找出响应进程id
pid=$(netstat -nlp | grep :$PORT | awk '{print $7}' | awk -F "/" '{print $1}')
echo "端口号对应进程id,pid=${pid}"
#杀掉pid对应的进程
if [ -n "$pid" ]; then
    kill -9 $pid;
fi
echo "杀死pid对应进程"
#运行项目,打印日志
nohup java -jar $APP_NAME  > nohup.out &
tail -f nohup.out
echo "--------------------------------"

二、将脚本上传到相应目录下

三、启动运行脚本

cd 到相应目录下(cd /usr/local/java)
./blogStart.sh

问题与解决

大家可能会遇到下面相似的问题,执行了./blogStart.sh后
-bash: ./blogStart.sh: Permission denied

解决:

这是因为权限问题导致的

chmod u+x start.sh
用法:
chmod [who] [opt] [mode] 文件/目录名
who代表对象,是以下字母中的一个或组合:

u:User,文件或文件夹的拥有者。
g:Group,文件或文件夹的所属群组。
o:Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围。
a:All,即全部的用户,包含拥有者,所属群组以及其他用户。

opt则是代表操作,可以为:
+:添加某个权限
-:取消某个权限
=:赋予给定的权限,并取消原有的权限

mode则代表权限:
r:可读
w:可写
x:可执行

原因:

是Windows和Linux的.sh脚本文件格式不同,如果在脚本中有空行,脚本是在Windows下进行编辑之后上传到linux上去执行的话,就会出现这个问题。
windows 下的换行符是\r\n,而 linux 下的换行符是\n,没有识别/r,所以会导致上述的报错,这个属于脚本编码的问题。
shell脚本在本地电脑编辑的,格式是dos(可以用vi编辑该shell脚本,进入命令行模式,输入:set ff 回车即可看到左下角显示fileformat=dos),在dos/window下按一次回车键实际上输入的是“回车(CR)”和“换行(LF)”,而Linux/unix下按一次回车键只输入“换行(LF)”,所以本地修改的sh文件在CentOS上运行每行都会多了一个CR,因此就会报错syntax error: unexpected end of file。

解决:

解决方法很简单,用vi编辑器打开该shell脚本,进入命令行模式(CTRL+C),输入:set ff=unix之后wq保存退出即可。这时如果再通过set ff查看会发现fileformat=unix。

猜你喜欢

转载自blog.csdn.net/weixin_44030860/article/details/129735968