1、安装java 1.8JDK
卸载Open JDK
首先,我们先检查系统是否自带了 JDK。输入命令
java -verison
批量删除
rpm -qa | grep java | xargs rpm -e --nodeps
下载并安装JDK
我们在 user 目录下建立一个新的 java文件夹,用来存放 JDK文件。
jdk下载地址
上传到服务器后,执行解压命令
// tar包进行解压
tar -zxvf jdk-8u401-linux-x64.tar.gz
环境变量配置
如果/etc/profile文件不可编辑,我们需要先修改其为可编辑才行
sudo chmod -v u+w /etc/profile
vim编辑器来进行编辑。输入命令
vim /etc/profile
添加如下配置
# java
export JAVA_HOME=/usr/java/jdk1.8.0_401
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
配置添加完成后,按 “Esc”键,输入 “:wq”,就可以保存文件并返回了
重新编译
source /etc/profile
测试是否安装成功
java
javac
java -version
jdk安装参考里面附带了Oracle账号
2、system 服务管理 Java 应用程序
创建服务单元文件
在 /etc/systemd/system 目录下创建一个以 .service 为后缀的文件,例如spring-boot.service。
vim /etc/systemd/system/spring-boot.service
chmod 777 /etc/systemd/system/spring-boot.service
/usr/lib/systemd/system/spring-boot.service
编辑服务单元文件
[Unit]
Description=spring-boot-demo
After=syslog.target
[Service]
User=root
ExecStart=/usr/java/jdk1.8.0_401/bin/java -jar /data/java/spring-boot/spring-boot-admin.jar
WorkingDirectory=/data/java/spring-boot
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
[Install]
WantedBy=multi-user.target
对应解释
[Unit] 部分:
Description=spring-boot:描述了这个服务的简短描述,即服务的名称。
After=syslog.target:指定了在启动这个服务之前,需要等待 syslog.target 目标完成启动。
[Service] 部分:
User=root:指定了这个服务运行的用户,这里是 root 用户。
ExecStart=java -jar /data/java/spring-boot/spring-admin.jar:指定了服务启动时要执行的命令,这里是启动一个Java应用程序,运行在 /data/java/spring-boot/spring-admin.jar 文件上。
WorkingDirectory=/data/java/spring-boot:指定了服务的工作目录,这是执行命令时的当前目录。
Restart=always:指定了服务的重启策略,即当服务意外退出时,总是自动重启。
RestartSec=10:指定了服务在意外退出后重新启动的延迟时间,这里是10秒。
StandardOutput=syslog:指定了服务的标准输出重定向到 syslog。这意味着服务的输出将会被记录到系统日志中。
StandardError=syslog:指定了服务的标准错误输出重定向到 syslog。
[Install] 部分:
此部分为空,因此没有指定服务的安装信息。
ExecStart也可以加一下启动参数等
错误了看日志
状态日志
systemctl status spring-boot.service
正常日志
journalctl
错误日志
journalctl -xe
重新加载systemd管理器配置
在编辑完成服务单元文件后,运行以下命令来重新加载systemd管理器配置:
sudo systemctl daemon-reload
启动并启用服务:
运行以下命令来启动和启用你的新服务:
sudo systemctl start spring-boot-service
sudo systemctl enable spring-boot-service
验证服务状态:
运行以下命令来验证你的服务是否已经成功启动:
sudo systemctl status spring-boot-service
3、Supervisor 管理 Java 应用程序
supervisorctl 命令
#启动一个服务
supervisorctl start <service_name>
#停止一个服务
supervisorctl stop <service_name>
#重启一个服务
supervisorctl restart <service_name>
查看所有服务的状态:
supervisorctl status
查看某个服务的状态:
supervisorctl status <service_name>
查看所有服务的详细信息:
supervisorctl -c /path/to/supervisord.conf status
重新加载配置:
supervisorctl reread
supervisorctl update
关闭 Supervisor:
supervisorctl shutdown
Supervisor 配置示例
[program:spring-admin]
command=/usr/local/java/jdk1.8.0_391/bin/java -jar -Xms256m -Xmx256m -Dspring.profiles.active=dev -Dserver.port=8801 /data/springBoot/sd-api/spring-admin-0.0.1-SNAPSHOT.jar
directory=/data/springBoot/sd-api/
environment=NACOS_NAMESPACE="d90cb455-****-61458cb3cf1a",NACOS_HOST="172.****.251",NACOS_PASSWORD="***"
autostart=true
startsecs=10
autorestart=true
startretries=3
user=root
priority=999
redirect_stderr=true
stdout_logfile_maxbytes=20MB
stdout_logfile_backups = 20
stopasgroup=false
killasgroup=false
stdout_logfile_maxbytes=1024MB
stdout_logfile=/data/springBoot/sd-api/logs/springBoot-admin.log
解释
[program:spring-admin]:定义了一个名为 spring-admin 的程序。
command:指定了启动命令,即 Java 应用程序的启动命令。在这里,它启动了一个 Java 可执行文件(JAR 文件),并设置了一些 JVM 参数和应用程序的参数,如内存大小、激活的 Spring profile、服务器端口等。
directory:指定了程序的工作目录,即程序运行时的当前工作目录。
environment:设置了环境变量。这里设置了三个环境变量:NACOS_NAMESPACE、NACOS_HOST 和 NACOS_PASSWORD。
autostart:指定了是否在 Supervisor 启动时自动启动该程序。
startsecs:指定了程序启动后的等待时间(秒),用于判断程序是否成功启动。
autorestart:指定了是否在程序意外退出后自动重启。
startretries:指定了自动重启的次数。
user:指定了程序运行的用户。
priority:指定了程序的优先级。
redirect_stderr:指定了是否将标准错误重定向到标准输出。
stdout_logfile_maxbytes:指定了标准输出日志文件的最大大小。
stdout_logfile_backups:指定了标准输出日志文件的备份数量。
stopasgroup 和 killasgroup:指定了是否将程序的进程和子进程组一起停止或杀死。
stdout_logfile:指定了标准输出日志文件的路径。
4、Supervisor 和自定义 Systemd 服务的对比
Supervisor:
优点:
- 简单易用:Supervisor 的配置相对简单,上手较容易。
- 跨平台支持:可以在不同的操作系统上使用。
- 功能丰富:提供了丰富的进程管理功能,如进程监控、自动重启等。
缺点:
- 对于一些高级功能,可能需要额外的配置。
- 不如 Systemd 那样紧密集成到操作系统中。
自定义 Systemd 服务(例如 spring-boot.service):
优点:
- 紧密集成到操作系统中:Systemd 是现代 Linux 系统中默认的服务管理工具,自定义服务可以更紧密地集成到系统中。
- 更丰富的功能:Systemd 提供了更丰富的功能和选项,如依赖管理、进程隔离、资源限制等。
- 灵活性和定制性:你可以完全控制你的自定义服务的行为,以满足特定的需求。
缺点:
- 配置复杂:相比 Supervisor,自定义 Systemd 服务的配置可能更加复杂一些。
- 学习曲线较陡:Systemd 提供了大量的功能和选项,需要花一些时间来学习和掌握。
总的来说,如果你的需求比较简单,只需要一个轻量级的进程管理工具来启动和监控 Java 应用程序,那么 Supervisor 是一个不错的选择。而如果你需要更丰富的功能和更紧密地集成到操作系统中,那么自定义 Systemd 服务可能更适合你的需求