Linux中配置systemd服务崩溃自动重启需在.service文件[Service]段设Restart=on-failure、RestartSec=5,并配StartLimitIntervalSec=60与StartLimitBurst=3防雪崩,再通过daemon-reload、enable--now生效并测试验证。

Linux 系统中配置 systemd 服务实现崩溃自动重启,核心是修改其 .service 文件中的 [Service] 区块,启用并合理约束 Restart 策略——不是加个 enable 就完事,而是让 systemd 在进程退出时主动干预、可控恢复。
设置基础重启策略
在服务单元文件(如 /etc/systemd/system/myapp.service)的 [Service] 段添加以下关键项:
- Restart=on-failure:推荐首选。仅在进程非零退出、被信号终止(如 SIGSEGV)、超时或 OOM kill 时重启,避免正常关闭(exit 0)也被误拉起
- RestartSec=5:每次重启前等待 5 秒,给日志落盘、资源释放留出缓冲,防止冷启动失败导致高频重试
- Type=simple(默认)或 Type=notify(若服务支持 sd_notify):确保 systemd 能准确识别主进程生命周期,避免“假启动”
防止无限重启与雪崩
不加限制的自动重启可能掩盖问题,甚至拖垮系统。必须配合启动频率控制:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- StartLimitIntervalSec=60:以 60 秒为统计窗口
- StartLimitBurst=3:该窗口内最多允许 3 次重启
- 超出后 systemd 会标记为
start-limit-hit,停止自动重启,需人工介入排查根本原因
增强可靠性:应对“假死”和资源异常
systemd 默认只感知进程是否退出,对卡死、高 CPU、内存耗尽等无感。可叠加以下机制:
-
健康检查前置:用
ExecStartPre=/usr/bin/curl -f http://localhost:8000/health || exit 1,启动前验证依赖服务就绪 -
资源限制:添加
MemoryMax=512M、CPUQuota=80%,配合OOMScoreAdjust=-500降低被 OOM Killer 杀掉概率 -
Watchdog 支持:若服务内置心跳(如某些 Go/Python 框架),启用
WatchdogSec=30并设Restart=watchdog,超时未上报即视为崩溃
启用并验证配置
改完别跳过这三步,否则配置不会生效:
- 运行
sudo systemctl daemon-reload—— 重新加载所有 unit 文件 - 运行
sudo systemctl enable --now myapp.service—— 启用开机自启并立即启动 - 模拟崩溃测试:
sudo systemctl kill --signal=SIGSEGV myapp.service,观察是否在RestartSec后自动恢复;再用journalctl -u myapp.service -n 50 -f实时查看日志确认行为

















