后台启动命令不等于完整的服务管理。学习 Java 应用部署时,可以用 systemd 明确用户、工作目录和启动参数;本文是实验方案,不表示本站已部署 Java 服务。
学习整理:2026-10-29。以下命令、地址和账号均为课程实验示例,按实际环境替换;涉及安装、覆盖配置或服务启停的操作先在隔离环境练习,不代表本站已经实施。
一、运维需要理解的Java概念
- JDK:开发和运行工具集合。
- JVM:执行Java字节码的虚拟机。
- JAR:常见应用打包形式。
- JVM参数:内存、GC、系统属性等。
- 环境变量:应用配置的一种来源。
不要求会开发Java,但要能启动、停止、查看日志和定位依赖问题。
二、检查环境
java -version
readlink -f "$(command -v java)"
rpm -qa | grep -i openjdk三、目录规划
/opt/myapp/releases/版本号/app.jar
/opt/myapp/current -> releases/版本号
/etc/myapp/myapp.env
/var/lib/myapp/
/var/log/myapp/程序、配置、数据和日志分离,便于权限管理和回滚。
四、Systemd示例
[Unit]
Description=My Java Application
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=myapp
Group=myapp
WorkingDirectory=/opt/myapp/current
EnvironmentFile=-/etc/myapp/myapp.env
ExecStart=/usr/bin/java -Xms256m -Xmx512m -jar /opt/myapp/current/app.jar
SuccessExitStatus=143
Restart=on-failure
RestartSec=5
TimeoutStopSec=30
[Install]
WantedBy=multi-user.target应用本身若输出到stdout/stderr,可通过journalctl查看:
journalctl -u myapp -f五、验证
systemctl status myapp
pgrep -af 'java.*app.jar'
ss -lntp | grep 8080
curl -f http://127.0.0.1:8080/health六、常见问题
- Java版本不兼容。
- 端口被占用。
- 配置文件或环境变量缺失。
- 数据库连接失败。
- 工作目录错误。
- 应用用户没有目录权限。
- 内存限制或OOM。
- Nginx代理地址错误。
检查OOM:
journalctl -k | grep -i -E 'oom|killed process'
free -h
systemctl show myapp -p MemoryCurrent -p MemoryMax七、发布与回滚
- 新版本放入独立releases目录。
- 检查文件校验值和所有者。
- 停止或摘除流量。
- 切换current符号链接。
- 重启并健康检查。
- 失败则切回旧版本并复核。
- 保存发布日志和版本号。
我的验收重点
先说清每个组件和参数解决的问题,再在实验环境记录正常结果、错误现象与恢复步骤。配置能通过语法检查只是起点,还应验证实际功能。本文保留为学习笔记,不把计划中的多机部署或演练写成本站完成记录。
服务启动前必须补齐的对象
示例 myapp 用户、组、JAR、工作目录和配置文件必须先创建并核对权限。EnvironmentFile 前的 - 表示允许文件缺失;必要配置不应忽略缺失。新增单元后先 systemd-analyze verify 单元路径,随后 daemon-reload,再在实验环境启动。/health 需要应用实际实现,不能把示例地址存在当成默认事实。回退程序版本不能自动回退已发生的数据库结构变更。
内容复核与修订:2026-10-29。实验示例与本站运行记录分别说明;原始归档日期保留。
评论 (0)