Java进阶全套教程(六)—— Linux运维实战超详细详解
本文是Java进阶教程中的Linux运维实战部分,主要介绍了Linux系统核心知识、磁盘管理和系统监控命令。首先讲解了Linux在企业开发中的定位和文件系统架构,重点分析了关键目录的功能。其次详细介绍了磁盘管理命令(df、lsblk、fdisk)的使用方法和实战案例,包括磁盘分区、格式化和挂载操作。最后讲解了系统状态监控命令(free、uptime等)和软件安装方式(RPM/YUM/源码编译),特
Java进阶全套教程(六)—— Linux运维实战超详细详解
一、Linux核心基础认知(Java开发必备)
1.1 Linux系统定位与企业应用场景
Linux是一款开源、免费、多用户、多任务、支持多线程与多CPU的类Unix操作系统,具备高稳定、高安全、低资源占用、可自由裁剪的核心特性,是后端开发、服务器运维、大数据、云计算领域的底层核心系统。
对于Java开发者而言,日常开发、项目部署、服务上线、故障排查、性能优化全流程都离不开Linux系统。企业中99%的JavaWeb项目、微服务集群、中间件(Redis、Tomcat、MySQL、MQ)均部署在Linux服务器(主流CentOS7/8、Ubuntu20.04),熟练掌握Linux命令与运维操作是后端工程师核心必备技能。
相较于Windows系统,Linux核心优势:无图形化冗余开销、后台服务稳定常驻、长期运行不卡顿、权限管控严格、网络性能优异、适配分布式集群架构。
1.2 Linux文件系统核心架构
Linux采用唯一树形根目录架构,所有文件、磁盘、硬件设备全部挂载在根目录/之下,无Windows盘符(C/D/E盘)概念,目录层级唯一且规范,是系统稳定运行的基础。
1.2.1 核心系统目录功能详解
-
/:系统根目录,所有目录的顶级父节点,整个文件系统的入口
-
/root:超级管理员root的家目录,权限最高,仅root用户可完全访问
-
/home:普通用户家目录集合,每个普通用户对应一个同名子目录,用于存放用户私有文件
-
/etc:系统与软件核心配置文件目录,所有服务、系统参数配置均存放于此(Java项目、MySQL、Redis配置文件默认存放核心目录)
-
/usr:系统软件安装默认目录,相当于Windows的Program Files,存放系统自带程序、依赖库、帮助文档
-
/var:动态数据目录,存放日志文件、缓存数据、数据库运行数据、定时任务临时文件
-
/bin:普通用户可执行的基础命令(ls、cd、cp、mv等),系统开机即可调用
-
/sbin:管理员专属系统命令,用于系统运维、权限管理、硬件配置,仅root用户可执行
-
/tmp:系统临时文件目录,存放运行临时缓存,重启后自动清空
-
/dev:硬件设备挂载目录,磁盘、网卡、U盘、光驱等硬件均以文件形式展示
-
/proc:虚拟进程目录,不占用磁盘空间,实时映射系统进程、CPU、内存运行状态
二、Linux磁盘管理核心命令(运维必备)
磁盘管理是服务器运维核心操作,主要用于排查磁盘空间不足、分区异常、挂载失效等问题,Java项目部署前必须确认磁盘容量充足,避免项目日志溢出、服务启动失败。
2.1 df 磁盘空间查询命令
核心作用:查看系统各文件系统磁盘总容量、已用容量、剩余容量、使用率、挂载点,快速定位磁盘爆满问题。
2.1.1 常用参数详解
-
-h:人性化单位显示(KB/MB/GB),默认字节单位,生产最常用参数
-
-a:显示所有文件系统,包含系统虚拟文件系统(/proc、/sys)
-
-T:显示分区文件系统类型(ext4、xfs等)
-
-i:查询inode使用情况,排查inode耗尽导致的磁盘无法写入问题
2.1.2 实战命令案例
# 人性化查看磁盘整体使用情况(生产高频)
df -h
# 查看磁盘容量+文件系统类型
df -hT
# 查看inode使用状态,排查文件创建失败问题
df -hi
# 仅查看指定目录所在磁盘使用情况
df -h /usr/local
2.1.3 输出字段解析
Filesystem:分区设备名称;Size:总容量;Used:已用容量;Avail:可用容量;Use%:使用率;Mounted on:挂载目录。生产环境中,磁盘使用率超过85%需及时清理日志、扩容分区,防止服务宕机。
2.2 lsblk 磁盘设备查看命令
核心作用:查看系统所有磁盘设备、分区大小、挂载状态、设备层级,快速确认新硬盘是否被系统识别。
2.2.1 常用参数与实战案例
# 查看所有磁盘设备简洁信息
lsblk
# 查看磁盘+文件系统完整信息
lsblk -f
# 以列表形式展示磁盘信息,去除冗余样式
lsblk -l
# 查看磁盘拓扑结构
lsblk -t
2.3 fdisk 磁盘分区命令
核心作用:创建、修改、删除磁盘分区,适配新硬盘分区场景,是服务器磁盘扩容核心工具。
2.3.1 核心操作指令
-
m:查看所有帮助指令
-
n:新建分区(主分区/扩展分区)
-
p:查看当前分区列表
-
d:删除指定分区
-
w:保存分区修改并退出
-
q:不保存修改,直接退出
2.3.2 新硬盘分区完整实战流程
# 1. 查看所有磁盘,确认新增硬盘设备(如/dev/sdb)
fdisk -l
# 2. 进入新硬盘分区编辑模式
fdisk /dev/sdb
# 3. 输入n新建分区,输入p选择主分区,默认分区编号1,回车确认分区起止扇区
# 4. 输入w保存分区,分区创建完成
# 5. 刷新分区表,让系统识别新分区
partprobe /dev/sdb
2.4 磁盘格式化与永久挂载实战
分区完成后需格式化文件系统并挂载目录,临时挂载重启失效,生产环境必须配置永久挂载。
# 1. 格式化新分区为ext4文件系统(Linux主流格式)
mkfs -t ext4 /dev/sdb1
# 2. 创建挂载目录(自定义业务目录)
mkdir -p /home/project/data
# 3. 临时挂载(重启失效)
mount /dev/sdb1 /home/project/data
# 4. 配置永久挂载(修改开机自动挂载文件)
vim /etc/fstab
# 文件末尾添加挂载规则
/dev/sdb1 /home/project/data ext4 defaults 0 0
# 5. 加载fstab配置,验证挂载无误
mount -a
# 6. 查看最终挂载结果
df -h
三、Linux系统状态监控命令
系统状态监控是Java服务故障排查、性能调优的核心能力,可实时查看系统资源、内核版本、登录状态、运行负载,快速定位CPU过载、内存溢出、服务器卡顿等问题。
3.1 系统版本与内核查询
# 查看系统内核完整信息
uname -a
# 仅查看内核版本
uname -r
# 查看CentOS系统详细发行版本
cat /etc/redhat-release
# 查看系统位数
getconf LONG_BIT
3.2 内存状态监控 free
核心作用:查看服务器物理内存、交换分区使用情况,排查Java服务内存溢出、内存泄漏问题。
# 人性化显示内存使用情况
free -h
# 定时刷新内存状态(每秒刷新一次)
free -hs 1
核心字段解析:total总内存、used已用内存、free空闲内存、buff/cache缓存内存、available可分配内存。Java服务部署需保证available内存充足,避免OOM内存溢出。
3.3 系统负载监控 uptime
核心作用:查看服务器运行时长、在线用户、1/5/15分钟平均负载,判断服务器CPU压力。负载值越低越好,生产环境长期不超过3,超过5表示CPU过载。
# 查看系统负载与运行状态
uptime
# 简洁展示负载信息
uptime -s
3.4 系统登录与操作日志监控
# 查看所有用户登录记录
last
# 查看指定用户登录日志
last root
# 查看历史执行命令(默认保存1000条)
history
# 清空当前用户命令历史(谨慎使用)
history -c
# 修改命令历史保存最大条数(临时生效)
export HISTSIZE=2000
四、Linux软件安装与包管理(Java环境必备)
Linux软件安装主流方式分为RPM离线安装、YUM在线安装、源码编译安装,Java开发所需的JDK、Tomcat、MySQL、Redis均通过三种方式部署,其中YUM为企业首选。
4.1 RPM包管理器(离线安装)
RPM是CentOS系统专属软件包管理工具,用于离线安装本地rpm后缀软件包,可精准查询、安装、卸载软件,缺点是无法自动解决依赖。
4.1.1 核心命令实战
# 安装rpm软件包(显示详细进度)
rpm -ivh jdk-8u381-linux-x64.rpm
# 升级软件包
rpm -Uvh mysql-community-server-5.7.44-1.el7.x86_64.rpm
# 卸载软件(忽略依赖,强制卸载)
rpm -ev --nodeps jdk1.8.0
# 查询软件是否已安装
rpm -qa | grep jdk
# 查询软件安装路径与文件列表
rpm -ql mysql-community-server
# 查询文件所属软件包
rpm -qf /usr/bin/java
4.2 YUM在线包管理器(企业主流)
YUM基于RPM二次封装,核心优势是自动检测、下载、安装依赖包,一键完成软件安装、升级、卸载,无需手动处理依赖冲突,是生产环境首选安装方式。
4.2.1 YUM核心配置与源优化
YUM默认使用官方源,下载速度慢,企业统一更换阿里云镜像源,提升下载速度与稳定性。
# 1. 安装下载工具wget
yum install -y wget
# 2. 备份系统默认yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 3. 下载阿里云CentOS7镜像源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 4. 清空旧缓存、生成新缓存
yum clean all
yum makecache
# 5. 查看可用yum仓库
yum repolist enabled
4.2.2 YUM高频实战命令
# 在线安装软件(自动解决依赖)
yum install -y tomcat mysql redis
# 卸载软件
yum remove -y tomcat
# 搜索可安装软件包
yum search jdk
# 查看已安装软件列表
yum list installed
# 更新系统所有软件(生产谨慎使用)
yum update -y
# 清理yum缓存
yum clean all
4.3 源码编译安装(高性能定制部署)
源码安装可自定义安装路径、编译参数,适配个性化业务需求,性能最优,适合Redis、Nginx、Tomcat等中间件定制部署,核心流程:解压→配置→编译→安装。
# 1. 安装编译依赖环境
yum install -y gcc gcc-c++ make cmake
# 2. 上传源码包至服务器,解压至/usr/local
tar -zxvf apache-tomcat-9.0.85.tar.gz -C /usr/local/
tar -zxvf redis-7.2.0.tar.gz -C /usr/local/
# 3. 进入源码目录编译安装(以Redis为例)
cd /usr/local/redis-7.2.0
make MALLOC=libc
make install
# 4. 配置全局环境变量
vim /etc/profile
# 末尾添加
export REDIS_HOME=/usr/local/redis-7.2.0
export PATH=$PATH:$REDIS_HOME/src
# 5. 生效环境变量
source /etc/profile
# 6. 验证安装
redis-server --version
五、Java核心环境部署实战(JDK+Tomcat+MySQL)
5.1 JDK8 环境完整部署
JDK是Java项目运行核心环境,生产统一使用JDK8稳定版本,采用源码解压+环境变量配置方式部署,无安装冗余。
# 1. 解压JDK安装包至系统软件目录
tar -zxvf jdk-8u381-linux-x64.tar.gz -C /usr/local/
# 2. 编辑全局环境变量配置文件
vim /etc/profile
# 3. 文件末尾追加JDK环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_381
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
# 4. 生效环境变量
source /etc/profile
# 5. 验证JDK部署成功
java -version
javac -version
5.2 Tomcat9 服务器部署
Tomcat是JavaWeb项目核心容器,部署后可运行War包、SpringBoot外置项目,配置环境变量实现全局调用。
# 1. 解压Tomcat源码包
tar -zxvf apache-tomcat-9.0.85.tar.gz -C /usr/local/
mv /usr/local/apache-tomcat-9.0.85 /usr/local/tomcat9
# 2. 配置Tomcat环境变量
vim /etc/profile
export TOMCAT_HOME=/usr/local/tomcat9
export PATH=$PATH:$TOMCAT_HOME/bin
source /etc/profile
# 3. 启停Tomcat服务
# 启动服务
startup.sh
# 停止服务
shutdown.sh
# 4. 查看Tomcat运行日志
tail -f /usr/local/tomcat9/logs/catalina.out
# 5. 开放8080端口防火墙
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
5.3 MySQL5.7 数据库部署与配置
MySQL5.7是企业Java项目主流数据库,采用YUM在线部署,解决GPG校验报错、密码策略限制、远程连接等核心问题。
# 1. 下载MySQL5.7 yum源包
wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
# 2. 安装yum源
rpm -ivh mysql57-community-release-el7-10.noarch.rpm
# 3. 安装MySQL(跳过GPG校验,解决安装报错)
yum install -y mysql-community-server --nogpgcheck
# 4. 启动MySQL并设置开机自启
systemctl start mysqld
systemctl enable mysqld
# 5. 查看初始临时密码
grep "password" /var/log/mysqld.log
# 6. 登录MySQL
mysql -uroot -p
# 7. 修改密码策略(适配简单密码,测试环境使用)
set global validate_password_policy=0;
set global validate_password_length=6;
# 8. 修改root管理员密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
# 9. 开启远程连接权限
update mysql.user set host='%' where user='root';
flush privileges;
# 10. 开放3306数据库端口
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
5.4 MySQL完整卸载流程(彻底清理残留)
部署失败、版本更换时需彻底卸载MySQL,清理所有配置、数据、依赖残留,避免冲突。
# 1. 停止MySQL服务
systemctl stop mysqld
# 2. 查询所有MySQL安装组件
rpm -qa | grep -i mysql
# 3. 强制卸载所有MySQL组件
rpm -ev --nodeps mysql57-community-release-el7-10.noarch
rpm -ev --nodeps mysql-community-server-5.7.44
rpm -ev --nodeps mysql-community-client-5.7.44
rpm -ev --nodeps mysql-community-common-5.7.44
rpm -ev --nodeps mysql-community-libs-5.7.44
# 4. 查找并删除所有MySQL残留文件
find / -name mysql
rm -rf /var/lib/mysql
rm -rf /etc/my.cnf
rm -rf /usr/share/mysql
# 5. 验证卸载完成
rpm -qa | grep -i mysql
六、Linux进程管理(Java服务运维核心)
进程是服务器运行的最小单元,Java项目、Tomcat、MySQL、Redis均以进程形式常驻后台运行,进程管理可实现服务启停、状态监控、异常查杀,是线上故障排查核心技能。
6.1 ps 静态进程查询命令
核心作用:一次性查询当前系统所有进程快照,静态展示进程状态,用于查询Java、中间件进程PID。
# 查看所有完整进程信息
ps -aux
# 精准查询Java进程(排查项目进程是否启动)
ps -aux | grep java
# 查询Tomcat、MySQL进程
ps -aux | grep tomcat
ps -aux | grep mysql
# 过滤僵尸进程
ps -aux | grep Z
6.1.1 进程状态解析
-
R:运行状态,进程正在占用CPU执行任务
-
S:睡眠状态,进程等待资源,正常常驻后台服务状态
-
T:暂停状态,进程被手动暂停
-
Z:僵尸状态,进程已终止但资源未释放,需手动查杀
6.2 top 动态系统监控命令
核心作用:实时动态监控系统进程、CPU、内存、负载状态,相当于Linux任务管理器,持续监控Java服务资源占用。
# 默认3秒刷新一次全局监控
top
# 每秒刷新一次监控数据
top -d 1
# 仅监控指定PID的Java进程
top -p 12580
# 按内存占用排序(默认CPU排序)
top -o %MEM
6.3 kill 进程查杀命令
核心作用:终止异常进程、重启服务,分为普通终止和强制终止,生产优先使用温和终止方式。
# 温和终止进程(等待进程释放资源、优雅退出)
kill 12580
# 强制终止进程(进程卡死、无响应时使用)
kill -9 12580
# 批量查杀所有Java进程
killall -9 java
# 查杀所有Tomcat进程
killall -9 tomcat
七、网络端口与服务管理
7.1 网络状态查询命令
用于排查端口占用、服务无法访问、网络连接异常等问题,Java项目端口冲突、接口不通均通过此类命令排查。
# 查看网卡配置、IP地址
ip addr
# 查看所有端口监听状态
netstat -atnlp
# 精准查询指定端口占用情况(排查8080、3306、6379端口)
netstat -tulpn | grep 8080
# 通过端口查询对应进程PID
lsof -i:8080
# 查看TCP/UDP连接状态
netstat -st
netstat -su
7.2 系统服务启停管理(systemctl)
CentOS7+默认使用systemd管理系统服务,替代传统service/chkconfig命令,统一管理所有后台服务启停、开机自启。
# 启动服务
systemctl start mysqld
systemctl start redis
# 停止服务
systemctl stop mysqld
# 重启服务
systemctl restart mysqld
# 查看服务运行状态
systemctl status mysqld
# 设置开机自启
systemctl enable mysqld
# 关闭开机自启
systemctl disable mysqld
# 查看所有开机自启服务
systemctl list-unit-files --type=service | grep enabled
八、定时任务与防火墙配置
8.1 Crontab 定时任务实战
定时任务用于执行周期性业务,如凌晨备份数据库、定时清理项目日志、定时同步数据,是Java项目运维必备功能。
8.1.1 定时任务语法规范
语法格式:分 时 日 月 周 执行命令,*代表任意时间,-代表范围,,代表多时段,/代表间隔
8.1.2 实战定时任务案例
# 编辑当前用户定时任务
crontab -e
# 每日凌晨2点清理Tomcat日志
0 2 * * * rm -rf /usr/local/tomcat9/logs/*.out
# 每周一、三、五凌晨3点备份MySQL数据库
0 3 * * 1,3,5 /usr/local/mysql/bin/mysqldump -uroot -p123456 test > /home/backup/test_$(date +\%Y\%m\%d).sql
# 每10分钟同步系统时间
*/10 * * * * ntpdate time.aliyun.com
# 每月1号凌晨4点清理磁盘临时文件
0 4 1 * * rm -rf /tmp/*
# 查看当前用户定时任务
crontab -l
# 删除所有定时任务
crontab -r
8.2 Firewalld 防火墙配置
防火墙用于管控服务器端口访问权限,默认拦截所有外部端口,Java项目部署后需手动放行对应端口,保证外部可访问。
# 查看防火墙状态
firewall-cmd --state
# 查看所有放行端口与服务
firewall-cmd --list-all
# 放行指定端口(永久生效)
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --add-port=6379/tcp --permanent
# 放行http/https服务
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
# 移除指定端口
firewall-cmd --remove-port=8080/tcp --permanent
# 重载防火墙配置(修改后必须执行)
firewall-cmd --reload
# 设置默认防火墙区域
firewall-cmd --set-default-zone=public
九、SELinux安全机制与系统安全优化
SELinux是Linux内核级安全防护机制,默认强制开启,会拦截端口访问、文件读写、服务调用,导致Java项目、数据库无法正常访问,生产环境一般临时或永久关闭。
# 查看SELinux当前运行模式
getenforce
# 临时关闭SELinux(重启失效)
setenforce 0
# 永久关闭SELinux
vim /etc/selinux/config
# 修改配置
SELINUX=disabled
# 重启系统生效
reboot
SELinux三种模式:enforcing强制拦截、permissive警告不拦截、disabled完全关闭,开发测试环境建议关闭,生产严格环境可按需配置权限。
十、Java项目线上日志排查与服务自启动配置
Java项目部署到Linux服务器后,日常运维核心工作为日志异常排查和服务持久自启。日志排查可快速定位空指针、接口报错、OOM溢出、数据库连接异常等线上问题;服务自启动可保障服务器重启、程序崩溃后项目自动恢复,避免人工手动重启,是生产环境必备运维能力。
10.1 Java项目核心日志类型与存储规范
Linux环境下Java项目日志分为框架日志、业务日志、服务器容器日志三大类,所有日志默认存储在固定目录,排查问题需精准区分日志场景,避免无效排查。
-
Tomcat容器日志:存放Tomcat运行、项目启动、端口异常、全局异常日志,路径为
/usr/local/tomcat9/logs/,核心文件为catalina.out(全局日志,排查项目启动失败首选)。 -
SpringBoot内置日志:独立项目无Tomcat依赖,日志默认位于项目jar包同级目录,可通过配置文件自定义
log.path日志存储路径,核心文件为info.log、error.log。 -
Java业务自定义日志:项目代码中通过Logback、Log4j2打印的业务日志,包含接口请求、参数异常、业务逻辑报错、事务失败等核心业务信息,是排查业务bug的关键依据。
-
系统运行日志:服务器层面日志,排查内存溢出、进程被杀、系统资源不足导致的项目宕机问题,路径
/var/log/messages。
10.2 高频日志排查实战命令
结合Linux文本查询命令,针对性筛选Java项目报错、异常堆栈、超时请求等关键信息,适配线上快速排查场景,所有命令为生产高频使用。
10.2.1 实时监控项目运行日志
# 实时滚动查看Tomcat全局日志(线上实时监控项目启动、运行报错)
tail -f /usr/local/tomcat9/logs/catalina.out
# 实时监控SpringBoot项目日志
tail -f /home/project/java-demo/logs/info.log
# 实时监控并只输出错误日志(过滤无效信息)
tail -f /home/project/java-demo/logs/info.log | grep ERROR
10.2.2 精准筛选异常与报错信息
# 查询日志中所有异常堆栈信息(Exception)
grep -i "Exception" /usr/local/tomcat9/logs/catalina.out
# 查询空指针异常(高频业务报错)
grep -i "NullPointerException" /home/project/java-demo/logs/error.log
# 查询OOM内存溢出异常
grep -i "OutOfMemoryError" /usr/local/tomcat9/logs/catalina.out
# 统计当日报错总次数,定位异常频率
grep -i "ERROR" /home/project/java-demo/logs/info.log | grep "$(date +%Y-%m-%d)" | wc -l
10.2.3 时间段日志精准查询
用于排查指定时间段的线上故障,如某个时间点接口宕机、业务报错,精准定位问题根源。
# 查询2026-05-21 10:00-11:00之间的所有报错日志
sed -n '/2026-05-21 10:00:00/,/2026-05-21 11:00:00/p' /home/project/java-demo/logs/info.log | grep ERROR
# 导出指定时间段异常日志到文件,方便分析
sed -n '/2026-05-21 00:00:00/,/2026-05-21 23:59:59/p' catalina.out > 20260521-error.log
10.2.4 日志大文件快速排查技巧
生产环境日志文件动辄几个GB,禁止直接打开文件,需通过命令快速检索关键信息,避免服务器卡顿。
# 查看日志最后100行最新报错(优先看最新异常)
tail -n 100 /usr/local/tomcat9/logs/catalina.out | grep ERROR
# 查看日志前100行启动初始化日志,排查启动失败问题
head -n 100 /usr/local/tomcat9/logs/catalina.out
# 分页查看所有异常日志,逐行分析
grep -i "Exception" catalina.out | more
10.3 日志清理与自动归档(防止磁盘爆满)
Java项目日志持续累加,长期不清理会导致服务器磁盘使用率过高、项目写入失败,需配置定时任务自动清理过期日志。
# 手动清理30天前的日志文件
find /home/project/java-demo/logs/ -name "*.log" -mtime +30 -delete
find /usr/local/tomcat9/logs/ -name "*.out" -o -name "*.log" -mtime +30 -delete
# 配置定时任务:每日凌晨3点自动清理30天前日志
crontab -e
# 追加以下规则
0 3 * * * find /home/project/java-demo/logs/ -name "*.log" -mtime +30 -delete && find /usr/local/tomcat9/logs/ -mtime +30 -delete
10.4 Java项目服务自启动配置(生产必备)
服务器意外重启、进程崩溃后,默认需要手动启动Java项目,通过配置 systemctl系统服务 实现项目开机自启、异常重启、统一启停管理,适配CentOS7+所有版本,稳定性远超脚本自启。
10.4.1 编写Java项目启动脚本
先创建项目启动脚本,统一定义项目路径、JDK路径、启停逻辑,避免服务配置冗余。
# 1. 创建脚本存放目录
mkdir -p /usr/local/java-service
# 2. 创建项目启停脚本
vim /usr/local/java-service/demo-service.sh
脚本完整内容(适配SpringBoot Jar包项目,可直接复用):
#!/bin/bash
# JDK环境路径
JAVA_HOME=/usr/local/jdk1.8.0_381
# 项目Jar包路径
JAR_PATH=/home/project/java-demo/demo.jar
# 项目日志输出路径
LOG_PATH=/home/project/java-demo/logs/start.log
case $1 in
start)
# 后台启动项目,输出日志
nohup $JAVA_HOME/bin/java -jar $JAR_PATH >> $LOG_PATH 2>&1 &
echo "Java项目启动成功"
;;
stop)
# 查杀项目进程
PID=$(ps -aux | grep $JAR_PATH | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
kill -9 $PID
echo "Java项目停止成功"
fi
;;
restart)
$0 stop
sleep 2
$0 start
echo "Java项目重启成功"
;;
status)
PID=$(ps -aux | grep $JAR_PATH | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
echo "项目运行中,PID:$PID"
else
echo "项目未运行"
fi
;;
esac
10.4.2 授权脚本并测试启停
# 赋予脚本执行权限
chmod +x /usr/local/java-service/demo-service.sh
# 测试启动项目
/usr/local/java-service/demo-service.sh start
# 测试停止项目
/usr/local/java-service/demo-service.sh stop
# 测试重启项目
/usr/local/java-service/demo-service.sh restart
# 查看项目状态
/usr/local/java-service/demo-service.sh status
10.4.3 配置systemctl开机自启服务
在systemctl服务目录创建服务配置文件,实现系统统一管理、开机自启、异常自动重启。
# 创建系统服务配置文件
vim /etc/systemd/system/demo-java.service
服务配置文件完整内容:
[Unit]
# 服务描述
Description=Java Demo Project Service
# 依赖网络启动
After=network.target
[Service]
# 运行用户
User=root
# 启动命令
ExecStart=/usr/local/java-service/demo-service.sh start
# 停止命令
ExecStop=/usr/local/java-service/demo-service.sh stop
# 重启命令
ExecReload=/usr/local/java-service/demo-service.sh restart
# 服务异常、进程退出时自动重启
Restart=always
# 重启间隔时间(秒)
RestartSec=5
[Install]
# 系统开机自动激活服务
WantedBy=multi-user.target
10.4.4 加载配置并启用自启
# 重新加载系统服务配置
systemctl daemon-reload
# 设置开机自启
systemctl enable demo-java
# 启动Java项目服务
systemctl start demo-java
# 查看服务运行状态
systemctl status demo-java
# 关闭开机自启(如需取消)
systemctl disable demo-java
10.5 自启动服务故障排查要点
-
服务启动失败:执行
journalctl -u demo-java -f查看服务详细启动日志,排查Jar包路径错误、权限不足、端口占用问题。 -
开机不自启:检查服务是否设置enable、系统网络是否正常、JDK路径是否配置正确。
-
频繁自动重启:排查项目本身是否存在报错、端口冲突、内存溢出,导致进程频繁崩溃重启。
-
权限报错:确保启动脚本、Jar包目录拥有足够执行权限,可执行
chmod 755 项目路径授权。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)