首页 / 资讯中心 / 文章详情

11 · systemd 服务管理

11 · systemd 服务管理 ★ FEATURED ARTICLE
11 · systemd 服务管理一句话定位把你的 Java 应用做成系统服务——崩了自动拉起、随机器开机自启、日志统一管理。比 nohup 更专业。1. 为什么用 systemd 而不是 nohupnohupsystemd开机自启❌ 要自己写✅ 一条命令崩溃自动重启❌✅统一管理❌ 到处找PID✅systemctl统管日志自己重定向✅journalctl统一systemd 是现代 LinuxCentOS7/Ubuntu16的标准服务管理器几乎所有服务nginx/mysql/docker都归它管。2. systemctl 操作已有服务systemctl start nginx# 启动systemctl stop nginx# 停止systemctl restart nginx# 重启systemctl reload nginx# 重载配置不中断systemctl status nginx# ★查看状态最常用看运行情况最近日志systemctlenablenginx# 设为开机自启systemctl disable nginx# 取消开机自启systemctl is-enabled nginx# 查是否自启systemctl is-active nginx# 查是否在运行systemctl list-units--typeservice# 列出所有服务没权限前面加sudo。3. 把自己的 Java 应用做成 systemd 服务创建服务定义文件/etc/systemd/system/myapp.service[Unit] DescriptionMy Spring Boot App Afternetwork.target # 网络就绪后再启动 [Service] Typesimple Userdeploy # 用哪个用户跑别用root WorkingDirectory/opt/app # 工作目录 # 启动命令注意用绝对路径 ExecStart/opt/jdk-17/bin/java -Xms2g -Xmx2g -Dspring.profiles.activeprod -jar /opt/app/app.jar # 停止用 SIGTERM优雅停机 ExecStop/bin/kill -15 $MAINPID SuccessExitStatus143 # 143 被SIGTERM正常终止算成功 Restartalways # ★崩溃自动重启 RestartSec5 # 重启间隔5秒 # 环境变量可选 EnvironmentJAVA_HOME/opt/jdk-17 # 日志交给 journald或自己重定向 StandardOutputappend:/opt/app/logs/app.log StandardErrorappend:/opt/app/logs/app.log [Install] WantedBymulti-user.target # 开机自启的目标4. 启用你的服务# 1. 改了 .service 文件后重载 systemd 配置systemctl daemon-reload# 2. 启动systemctl start myapp# 3. 查看状态确认 active runningsystemctl status myapp# 4. 设为开机自启systemctlenablemyapp# 之后日常操作就和操作 nginx 一样systemctl restart myapp systemctl stop myapp5. 查服务日志journalctljournalctl-umyapp# 看 myapp 服务的全部日志journalctl-umyapp-f# ★实时追踪类似 tail -fjournalctl-umyapp-n200# 最近200行journalctl-umyapp--since10:00# 从10点开始journalctl-umyapp--sincetoday# 今天的journalctl-umyapp-perr# 只看 error 级别journalctl-umyapp--since2026-10-14 10:00--until10:30# 时间段如果.service里已经把日志重定向到文件StandardOutputappend:...也可以直接tail -f /opt/app/logs/app.log。6. 实战完整部署一个服务# 1. 上传 jar本地scpapp.jar prod:/opt/app/# 2. 写 service 文件服务器sudovim/etc/systemd/system/myapp.service# 粘贴上面的模板# 3. 启用sudosystemctl daemon-reloadsudosystemctlenablemyappsudosystemctl start myapp# 4. 验证systemctl status myapp journalctl-umyapp-f# 5. 以后升级scpapp.jar prod:/opt/app/# 传新包sudosystemctl restart myapp# 一条命令重启7. 坑与最佳实践✅ 改完.service文件必须systemctl daemon-reload否则不生效。✅ExecStart里的java、jar都要写绝对路径systemd 环境没有你的 PATH。✅Restartalways让服务崩溃自愈生产必备。✅ExecStop用kill -15优雅配SuccessExitStatus143避免被误判为失败。⚠️ 用非 root 用户Userdeploy跑注意目录和日志文件该用户要有权限。⚠️ 启动失败看systemctl status myapp和journalctl -u myapp -n 50错误都在里面。 想禁止自动重启排查问题临时systemctl stop myapp别一直被拉起干扰。8. 本篇速记systemctl start/stop/restart/status 服务# 控制服务systemctl enable/disable 服务# 开机自启systemctl daemon-reload# 改配置后重载 ★journalctl-u服务-f# 实时日志journalctl-u服务-n200# 最近200行# 服务定义/etc/systemd/system/xxx.service
阅读完成 · 觉得有帮助?
咨询建站