Systemd怎么配置服务崩溃后自动重新拉起

夜明同学_9143

夜明同学_9143

2026-11-06

173人浏览

原创

Restart=on-failure是生产环境唯一合理的选择,因它仅在非零退出码、信号终止或启动超时时重启,不干扰手动stop,避免always导致运维失效,且需配合RestartSec和StartLimit*防雪崩。

systemd怎么配置服务崩溃后自动重新拉起

必须显式配置 Restart=on-failure,否则崩溃后 systemd 默认静默退出,连段错误都不会管。

为什么 Restart=on-failure 是生产环境唯一合理的选择

systemd 默认 Restart=no,进程一退出就停着,不会尝试拉起。设成 Restart=always 更危险:你执行 systemctl stop mysqld 后,它会立刻被重新拉起,运维操作直接失效。

Restart=on-failure 只在以下情况触发重启:

  • 进程以非零退出码退出(比如配置校验失败、初始化报错)
  • 被信号终止(SIGSEGV、SIGKILL、SIGTERM 超时未响应等)
  • 启动超时(由 TimeoutStartSec 控制)

它不响应 exit(0) 这类“正常退出”,避免干扰平滑关闭或 reload 流程。

RestartSec 和 StartLimit* 必须一起配,否则可能雪崩或彻底拒启

光有 Restart=on-failure 不够。若服务反复崩溃,systemd 会高频拉起进程,耗尽内存/CPU,甚至压垮整机——就像没刹车的车。

关键参数组合:

  • RestartSec=5:每次失败后等 5 秒再试,留出端口释放、磁盘 IO 缓冲时间
  • StartLimitIntervalSec=60:滚动统计窗口为 60 秒
  • StartLimitBurst=3:该窗口内最多允许启动 3 次

超出后 systemd 标记为 start-limit-hit 并拒绝再试,此时必须人工查日志,而不是等它自己恢复。

Content Management Systems
Content Management Systems

跨平台内容管理系统构建与修改工作流(WordPress、Shopify、Wix、Squarespace、Drupal、WooCommerce、Joomla、HubSpot CMS Hub、Web…)

下载

验证当前生效值:systemctl show | grep -E "(Restart|StartLimit)"

容易被忽略但致命的三个坑

很多服务加了 Restart=on-failure 却没真正重启,主因是以下三点没处理:

  • 没配 RestartPreventExitStatus=1:MySQL 启动时发现配置语法错误(退出码 1),默认也会触发重启,导致“启动→失败→重启→再失败”死循环
  • 没 reload 配置文件:改完 .service 文件后,必须执行 sudo systemctl daemon-reload,否则 systemctl show 看到的仍是旧值
  • 没确认主进程识别方式:Nginx、Gunicorn 等 fork 多进程的服务,systemd 若只监控前台命令,会误判 master 已退出。必须用 Type=notify 或 Type=forking + PIDFile= 显式指定主进程

自动重启不等于故障修复,日志和状态必须人工确认

Restart=on-failure 只是把进程拉起来,掩盖不了底层问题。MySQL 崩溃后自动重启,InnoDB 可能处于不一致状态;Python 服务因数据库连接超时崩溃,重启后仍会重连失败。

每次触发重启后,务必检查:

  • sudo journalctl -u -n 50 -e,重点搜 Address already in use、InnoDB initialization failed、Connection refused
  • 服务自身的健康接口(如 /health)是否真返回 200
  • 依赖项(DB、Redis、网络)是否已就绪,避免用 After=network.target 而应选 After=network-online.target

最常被跳过的动作:重启后不看日志,只看 systemctl status 显示 active 就以为万事大吉——而真正的错误往往藏在第 3 行之后。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

20

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

20

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

20

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

20

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架零基础入门教程
XORM框架零基础入门教程

本专题梳理XORM框架的入门路径,从框架定位、依赖安装、连接数据库到跑通第一个增删改查示例,讲清Engine初始化、日志开启与项目目录规划,并对比GORM等同类ORM的差异,帮助Go开发者建立整体认知。

2026.11.04

0

15

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

2026.11.03

40

18

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程