讲师中心 微信公众号
AI工具推荐 视频效率加速

Linux 服务启动与自动重启配置

小宇吖_1404

小宇吖_1404

发布时间:2026-02-20 13:33:34

|

297人浏览过

|

来源于php中文网

原创

先用 journalctl -u service.service -n 50 -f 查看实时日志,重点关注“Failed with result”或“exited, status=”行;再用 systemctl status 快速定位失败摘要,结合 Restart=、依赖配置和 daemon-reload 等操作排查。

linux 服务启动与自动重启配置

systemd 服务启动失败时怎么看日志

服务起不来,别急着改配置,先看 systemd 记录的真实错误。最直接的方式是用 journalctl -u <service-name>.service -n 50 -f</service-name> 实时盯住日志,尤其注意带 Failed with result 或 exited, code=exited, status= 的行——这些才是真正的死因。

常见错误现象:

  • Failed to start MyApp.service: Unit not found. → 服务文件没放对位置,或没 reload
  • Failed at step EXEC spawning /path/to/app: No such file or directory → ExecStart 路径写错,或二进制没加执行权限
  • main process exited, code=exited, status=1/FAILURE → 应用本身启动就崩了,得结合应用日志看

实操建议:

  • 改完 .service 文件后,必须运行 sudo systemctl daemon-reload,否则 systemd 完全不认新配置
  • 用 sudo systemctl status <service-name>.service</service-name> 看当前状态和最近一次失败的摘要,比翻长日志快得多
  • 如果服务依赖网络或其它服务(比如数据库),记得在 [Unit] 段加 After=network.target 或 Wants=postgresql.service,否则可能抢在依赖之前启动

让服务崩溃后自动重启的关键参数

不是所有服务都适合自动重启,但多数后台进程(如 API 服务、消息消费者)需要它。核心靠 Restart= 和配套的 RestartSec=,但不同值的行为差异很大,选错反而掩盖问题。

常用组合与适用场景:

  • Restart=on-failure:只在非 0 退出码、被信号终止(如 SIGKILL 除外)、超时等“异常退出”时重启 —— 最常用,适合大多数守护进程
  • Restart=always:不管怎么退出都重启 —— 容易掩盖配置错误(比如每次启动都因参数错退出,然后无限循环),慎用
  • Restart=on-abort:仅当被 SIGABRT 终止才重启 —— 很少用,多见于调试场景

必须配合的参数:

  • RestartSec=5:两次重启之间至少等 5 秒,避免夯住系统;太小(如 1)可能触发 systemd 的 rate limit,导致服务被 temporarily disabled
  • StartLimitIntervalSec=60 和 StartLimitBurst=3:默认 60 秒内最多启动 3 次,超了就锁死 —— 这是保护机制,不是 bug;若真需要高频重启,得显式调大

服务启动顺序和依赖关系怎么写才可靠

很多服务卡在 “activating (start)” 状态不动,八成是依赖没写对。systemd 不是按文件名排序加载,而是严格按 [Unit] 段里的 After=、Wants=、Requires= 解析依赖图。

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载

关键区别:

  • Wants=:软依赖,目标服务启动失败不影响本服务启动
  • Requires=:硬依赖,目标服务启动失败,本服务直接标记为 failed
  • After=:只控制顺序,不保证目标一定成功;必须搭配 Wants= 或 Requires= 才有意义

实操踩坑点:

  • 想等网络就绪?别写 After=network.service(已废弃),改用 After=network-online.target + Wants=network-online.target
  • 依赖 Docker 容器?不要写 Wants=docker.service,而应写 After=docker.service 并确保 docker 已启用(sudo systemctl enable docker)
  • 自定义脚本依赖环境变量?EnvironmentFile= 必须放在 [Service] 段开头,且路径必须绝对(如 /etc/myapp/env),相对路径会静默失效

systemctl enable 和 start 的实际效果差异

sudo systemctl start myapp.service 是临时启动,机器重启后就没了;sudo systemctl enable myapp.service 才是让它开机自启——但很多人忽略 enable 的本质:它只是在 /etc/systemd/system/multi-user.target.wants/ 下建个符号链接,指向你的 .service 文件。

所以真正生效的前提是:

  • 服务文件必须放在 systemd 能扫描到的位置:/etc/systemd/system/(推荐,优先级最高)或 /usr/lib/systemd/system/
  • 文件名必须以 .service 结尾,且内容符合语法(可用 sudo systemctl daemon-reload && sudo systemctl cat myapp.service 验证是否被识别)
  • enable 后不会立即启动服务,要手动 start 或重启机器才第一次运行

容易被忽略的细节:

  • 如果服务文件在 /etc/systemd/system/ 下,但名字是 myapp(没后缀),enable 会静默失败,且不报错
  • 修改服务文件后只 enable 不 daemon-reload,旧配置仍生效;反过来,只 daemon-reload 不 enable,则下次重启后失效
  • 想彻底禁用?用 sudo systemctl disable myapp.service 删除软链,再 sudo systemctl stop myapp.service 停掉当前实例

复杂点在于:有些服务(比如用 Type=notify 的)要求应用自己调用 sd_notify() 告知 systemd “我准备好了”,否则 systemd 会一直等超时;这种情况下,光配对参数没用,代码里也得配合。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

相关专题

更多
k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

785

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6279

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

7397

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2913

2024.04.08

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

319

2026.02.11

Docker 容器部署
Docker 容器部署

本专题整合了Docker容器部署相关内容,阅读专题下面的文章了解更多详细操作教程。

471

2026.03.31

Java容器化部署与Docker实践教程合集
Java容器化部署与Docker实践教程合集

聚焦 Java 应用的容器化与云原生部署,讲解 Dockerfile 编写规范与 Java 应用镜像构建、多阶段构建(Multi-stage Build)减小镜像体积、Jib / Buildpacks 免 Dockerfile 镜像构建方案、JVM 容器感知参数(-XX:MaxRAMPercentage)配置、Docker Compose 编排多服务(应用 + MySQL + Redis)、容器健康检查与资源限制、Kubernetes

440

2026.05.11

Go Docker与容器化部署教程合集
Go Docker与容器化部署教程合集

聚焦 Go 应用的容器化部署优势与实践,讲解 Go 静态编译特性(CGO_ENABLED=0)与 scratch / distroless 极小基础镜像构建、多阶段 Dockerfile 编写规范、交叉编译生成目标平台二进制、镜像安全扫描(Trivy)与漏洞修复、Docker Compose 本地编排开发环境、Kubernetes Deployment / Service / ConfigMap 部署 Go 服务、健康检查(Livene

325

2026.05.15

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

0

2026.11.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn