路径:vi /home/app/start.sh
#!/bin/sh
user=`whoami`
NEEDED_USER=root
APP_NAME=/home/app/springboot-demo-0.0.1-SNAPSHOT.jar
if [ ! -f "${APP_NAME}" ]; then
echo "${APP_NAME} not found!"
exit 1
fi
if [ "${user}" == "${NEEDED_USER}" ]; then
nohup java -jar -XX:MetaspaceSize=6144m -XX:MaxMetaspaceSize=12288m ${APP_NAME} --server.port=80 >> /home/app/logs/80.log 2>&1 &
else
echo "USER ${NEEDED_USER} please!"
fi
注意:
a.使用全局路径
b.#!/bin/sh必须要加,这一行指明了应该使用什么程序来执行(/bin/sh还是/bin/bash)
c.创建脚本后记得给脚本设置执行权限
chmod +x start.sh
路径:vi /home/app/shutdown.sh
#!/bin/sh
user=`whoami`
NEEDED_USER=root
APP_NAME=/home/app/springboot-demo-0.0.1-SNAPSHOT.jar
if [ ! -f "${APP_NAME}" ]; then
echo "${APP_NAME} not found!"
exit 1
fi
if [ "${user}" == "${NEEDED_USER}" ]; then
ps -ef | grep ${APP_NAME} | grep -v grep | awk '{print $2}' | xargs kill -9
else
echo "USER ${NEEDED_USER} please!"
fi
注意:
a.使用全局路径
b.#!/bin/sh必须要加,这一行指明了应该使用什么程序来执行(/bin/sh还是/bin/bash)
c.创建脚本后记得给脚本设置执行权限
chmod +x shutdown.sh
路径:vi /home/app/restart.sh
#!/bin/sh
user=`whoami`
NEEDED_USER=root
APP_NAME=/home/app/springboot-demo-0.0.1-SNAPSHOT.jar
if [ ! -f "${APP_NAME}" ]; then
echo "${APP_NAME} not found!"
exit 1
fi
if [ "${user}" == "${NEEDED_USER}" ]; then
ps -ef | grep ${APP_NAME} | grep -v grep | awk '{print $2}' | xargs kill -9
nohup java -jar -XX:MetaspaceSize=6144m -XX:MaxMetaspaceSize=12288m ${APP_NAME} --server.port=80 >> /home/app/logs/80.log 2>&1 &
else
echo "USER ${NEEDED_USER} please!"
fi
注意:
a.使用全局路径
b.#!/bin/sh必须要加,这一行指明了应该使用什么程序来执行(/bin/sh还是/bin/bash)
c.创建脚本后记得给脚本设置执行权限
chmod +x restart.sh
路径:/usr/lib/systemd/system/app.service
[Unit]
Description=website
After=network.target
[Service]
Type=forking
ExecStart=/home/app/start.sh
ExecReload=/home/app/restart.sh
ExecStop=/home/app/shutdown.sh
[Install]
WantedBy=multi-user.target
注意:
a.使用全局路径
b.创建脚本后记得更新服务
systemctl daemon-reload
开机启动:systemctl enable app
关闭开机启动:systemctl disable app
启动:systemctl start app
关闭:systemctl stop app
重启:systemctl restart app
查看状态:systemctl status app
修改服务配置重新生效:systemctl daemon-reload
0 命令成功结束
1 通用未知错误
2 误用shell命令
126 命令不可执行
127 没找到命令
128 无效退出参数
128+x Linux 信号x的严重错误
130 Linux 信号2 的严重错误,即命令通过SIGINT(Ctrl+C)终止
203 缺失脚本执行器标识(备注2)
255 退出状态码越界
如运行sh脚本报出如下错误:
/bin/sh^M: 坏的解释器: 没有那个文件或目录
是由于在windows下编辑的脚本文件拷贝至linux导致的,windows下编辑文本每一行结尾是\n\r,而Linux下则是\n,
解决方法:
在终端输入sed -i 's/\r$//' daemon.sh
sed -i 's/\r$//' daemon.sh 会把make-all-linux-project.sh中的行尾的\r替换为空白,其中daemon.sh为报错的脚本。
为避免该错误,可以直接在linux新建脚本或者再linux环境下拷贝。
如果使用systemctl status app命令查看报错状态为203,有两种可能导致这种错误的原因:
(1)没有在脚本命令前添加#!/bin/sh命令行,导致无法识别应该使用哪种解释器来运行当前脚本
(2)没有给脚本文件设置可以执行权限,使用chmod +x XXX.sh来给脚本文件设置可执行权限.
本文对原文做了补充,原文地址如下:
https://blog.csdn.net/m0_38110132/article/details/84871179