JAVA/linux/系统运维/编程语言/银河麒麟

jar项目宿主机java运行,加入系统服务实现自动启动以及systemctl控制

daimafengzi · 8月20日 · 2024年 · · · 本文共2481个字 · 预计阅读9分钟21次已读

前言

首先,我的启动命令如下,因为要对接nacos所以会比较长点.

nohup java -jar -Dnacos.server-addr=127.0.0.1:8848 -Dnacos.namespace=prod  -Dnacos.username=nacos -Dnacos.password=nacos /data/app-service/app-service-1.0.0.jar > /data/app-service/log/app.service 2>&1 &

当然可以,这条命令是一个典型的用于后台启动 Java 应用程序的例子。下面是对这条命令各个部分的详细解释:
1. nohup: 这个命令意味着即使用户退出登录(logout)后,被 nohup 命令启动的进程也不会终止。这对于长时间运行的服务来说非常有用。
2. java -jar: 这是运行一个 JAR 文件的标准方式。-jar 参数告诉 Java 虚拟机 (JVM) 将给定的 JAR 文件作为应用程序来执行。
3. -Dnacos.server-addr=127.0.0.1:8848: 这是一个 JVM 参数,用于设置 Nacos 服务器地址。这里指定了 Nacos 服务器的 IP 地址和端口127.0.0.1:8848
4. -Dnacos.namespace=prod: 同样是一个 JVM 参数,用于指定 Nacos 的命名空间。这里的命名空间是 prod,通常用来区分不同的环境或应用。
5. -Dnacos.username=nacos-Dnacos.password=nacos: 这两个参数分别用于指定访问 Nacos 服务器所需的用户名和密码。
6. /data/app-service/app-service-1.0.0.jar: 这是指定要运行的 JAR 文件的路径。在这个例子中,JAR 文件名为 app-service-1.0.0.jar,位于 /data/app-service/ 目录下。
7. > /data/app-service/log/app-service.log: 这个重定向操作符 (2>&1) 会把标准输出 (stdout) 重定向到指定文件中。在这个例子中,输出会被重定向到 /data/app-service/log/app-service.log 文件中。这意味着所有标准输出都会被记录到这个文件中,而不是显示在终端上。
8. 2>&1: 这个重定向操作符 (2>&1) 会把标准错误 (stderr) 重定向到与标准输出相同的地方。也就是说,所有的错误信息也会被记录到 /data/app-service/log/app-service.log 文件中。
9. &: 这个符号表示命令应该在后台运行。这允许用户在启动服务后立即返回到命令行界面,并继续执行其他命令。

部署

创建成系统服务

创建 app.service
可以在本地创建好 在传到 /etc/systemd/system/ 目录下

/usr/bin/java 需要改成自己的java环境对应地址
/srv/sites/app.jar 改为自己jar存放包地址
请确保/data/app-service/log的log目录存在

[Unit]
Description=Auth Center Service
After=network.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/bin/java -jar -Dnacos.server-addr=127.0.0.1:8848 -Dnacos.namespace=prod -Dnacos.username=nacos -Dnacos.password=nacos /data/app-service/app-service-1.0.0.jar > /data/app-service/log/app-service.log 2>&1 &
ExecStop=/bin/kill -s TERM $MAINPID
Restart=always
RestartSec=10
WorkingDirectory=/data/app-service

[Install]
WantedBy=multi-user.target

重新加载服务单元文件

更新 app.service 文件后,请确保重新加载服务单元文件:

systemctl daemon-reload

启动服务

systemctl start app.service

检查服务状态

systemctl status app.service

设置服务开机启动

systemctl enable app.service

关闭开机启动

systemctl disable app.service

验证是否开机启动

systemctl is-enabled app.service

关闭服务

systemctl stop app.service

碰到错误项解决

启动状态显示错误: code=exited, status=200/CHDIR

一般都是目录权限问题


原因1 :systemctl执行脚本时需要知道脚本的解释器
原因2:目标目录的执行权限不够
原因3:要执行的脚本编码格式不正确
原因4:定义的workingdirectory路径有问题
解决方法:
1.在自定义脚本的开头加上#!/bin/sh
2.修改目标目录的权限 chmod -R 777 /目标目录
3.vi或vi编辑文件输入:set ff+回车键查看当前文件编码格式,:set ff=unix+回车键设置文件的编码格式为unix;
4.Systemd下的服务配置,如果设定使用了workingdirectory,但是在systemctl start之前没有创建该目录,将会无法正常启动,并且根据缺省方式下的status提示信息和journalctl无法清楚地定位问题,如果使用到workingdirectory,需要事先保证该目录的创建,可以考虑使用systemd提供的debug日志进行确认;

0 条回应
Copyright © 2022-2024 LuoWeiHua
| 耗时 0.867 秒 | 查询 59 次 | 内存 4.20 MB |