Linux使用systemctl设置JAVA开机启动

1.编写JAVA启动停止脚本

启动脚本

路径: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

 

2.编写服务配置

路径:/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

 

3.相关命令

开机启动:systemctl enable app

关闭开机启动:systemctl disable app

启动:systemctl start app

关闭:systemctl stop app

重启:systemctl restart app

查看状态:systemctl status app

修改服务配置重新生效:systemctl daemon-reload

 

4.常见systemctl错误码

0                命令成功结束
1                通用未知错误
2                误用shell命令
126            命令不可执行
127            没找到命令
128            无效退出参数
128+x        Linux 信号x的严重错误
130            Linux 信号2 的严重错误,即命令通过SIGINT(Ctrl+C)终止

203            缺失脚本执行器标识(备注2)
255            退出状态码越界

 

备注1

如运行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环境下拷贝。

备注2

如果使用systemctl status app命令查看报错状态为203,有两种可能导致这种错误的原因:

(1)没有在脚本命令前添加#!/bin/sh命令行,导致无法识别应该使用哪种解释器来运行当前脚本

(2)没有给脚本文件设置可以执行权限,使用chmod +x XXX.sh来给脚本文件设置可执行权限.

 

本文对原文做了补充,原文地址如下:
https://blog.csdn.net/m0_38110132/article/details/84871179

 

你可能感兴趣的:(Linux,Java)