Systemd 服务管理
在 Linux 系统上创建和管理 systemd 服务的最佳实践。
服务单元文件模板
路径:/etc/systemd/system/<service-name>.service
ini
[Unit] Description=My Application Service After=network.target Wants=network-online.target [Service] Type=simple User=appuser Group=appuser WorkingDirectory=/opt/myapp ExecStart=/opt/myapp/start.sh Restart=on-failure RestartSec=5 StandardOutput=journal StandardError=journal # 安全加固 NoNewPrivileges=true ProtectSystem=strict ProtectHome=true ReadWritePaths=/opt/myapp/data # 资源限制 LimitNOFILE=65535 MemoryMax=512M [Install] WantedBy=multi-user.target
常用操作
| 操作 | 命令 |
|---|---|
| 启动 | systemctl start <service> |
| 停止 | systemctl stop <service> |
| 重启 | systemctl restart <service> |
| 平滑重载 | systemctl reload <service> |
| 查看状态 | systemctl status <service> |
| 开机自启 | systemctl enable <service> |
| 取消自启 | systemctl disable <service> |
| 查看日志 | journalctl -u <service> -f |
工作流程
创建新服务
- •编写
.service文件到/etc/systemd/system/ - •
systemctl daemon-reload - •
systemctl start <service> - •
systemctl status <service>确认运行正常 - •
systemctl enable <service>设置开机自启
修改已有服务
- •编辑
.service文件 - •
systemctl daemon-reload(必须!) - •
systemctl restart <service>
排查故障
- •
systemctl status <service>— 查看当前状态和最近日志 - •
journalctl -u <service> -n 50 --no-pager— 查看最近 50 行日志 - •
journalctl -u <service> --since "1 hour ago"— 按时间范围查看 - •检查 ExecStart 路径和权限是否正确
- •检查 User/Group 是否存在且有权限
注意事项
- •修改 service 文件后必须
daemon-reload - •不要用
kill -9停止 systemd 管理的服务 - •生产环境建议配置
Restart=on-failure和合理的RestartSec - •使用
journalctl而非手动管理日志文件