Linux systemd 服务管理:从开机自启到日志排查的生产级实践
现代 Linux 发行版早已从 SysV init 迁移到 systemd。它不仅管开机启动,还管服务监控、日志收集、定时任务、资源控制。如果你的服务还在用 nohup + & 启动——是时候升级了。
Unit 文件编写
每个 systemd 服务对应一个 Unit 文件。以 Node.js 应用为例:
1 | [Unit] |
关键字段解读:After 定义启动顺序、Restart=on-failure 异常退出自动重启、EnvironmentFile 从外部文件加载环境变量避免写在 Unit 中。
常用命令
| 命令 | 作用 |
|---|---|
| systemctl start/stop/restart name | 启停服务 |
| systemctl enable/disable name | 开机自启/禁止 |
| systemctl status name | 查看状态 |
| systemctl daemon-reload | 重新加载 Unit 文件 |
| systemctl list-units –state=failed | 查看失败的服务 |
资源限制
systemd 可以直接在 Unit 文件中限制服务资源使用:
1 | [Service] |
MemoryMax 限制服务最多使用 512MB,超过会被 OOM 杀掉。CPUQuota 限制 CPU 使用率(单核 100% 为基准)。建议生产环境的所有服务都设置资源限制。
journalctl 日志排查
systemd 的日志系统叫 journal,用 journalctl 查看:
1 | journalctl -u myapp # 查看指定服务日志 |
建议限制日志大小避免占满磁盘:在 /etc/systemd/journald.conf 中设置 SystemMaxUse=500M。
systemd Timer:替代 cron
systemd Timer 可以替代 cron 做定时任务,优势是:支持单调时钟(不受系统时间调整影响)、支持随机延迟避免惊群效应、日志自动进入 journal。
总结
systemd 远不止开机启动。Unit 文件 + 资源限制保障服务稳定运行,journalctl 统一日志入口方便排查,Timer 现代化定时任务。掌握 systemd 是现代 Linux 运维的基本功。
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自CC 的技术工坊
