systemd 管理后台进程更可靠可控,通过标准 .service 文件定义服务,含unit[install]三区块,支持自启、重启、日志统一及资源限制;需 daemon-reload 后 start/enable,并用 systemctl/journalctl 运维。

直接用 systemd 管理后台进程,比写守护脚本或 nohup 更可靠、更可控。它能自动拉起崩溃进程、限制资源、统一日志、支持开机自启,而且配置清晰、操作简洁。
写一个标准的 .service 文件
服务定义全靠这个文件,放在 /etc/systemd/system/ 目录下,比如 myapp.service:
- [Unit] 区块说明服务用途和依赖关系,常用 After=network.target 表示等网络就绪后再启动
- [Service] 是核心:用 ExecStart 指定启动命令(支持绝对路径脚本或二进制),加上 User 和 Group 明确运行身份;建议加 Restart=always 或 Restart=on-failure 实现异常自恢复
- [Install] 决定启用逻辑:WantedBy=multi-user.target 表示纳入常规多用户启动流程,这是最常用的目标
加载并启用服务
保存 service 文件后不能直接运行,必须通知 systemd 重新读取配置:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 执行 sudo systemctl daemon-reload 让新文件生效
- 用 sudo systemctl start myapp.service 启动一次
- 确认运行状态:运行 sudo systemctl status myapp.service 查看是否 active (running),同时能看到最近日志片段
- 设为开机自启:运行 sudo systemctl enable myapp.service,systemd 会自动创建软链接到对应 target 目录
日常运维常用操作
所有管理都通过 systemctl 完成,无需手动 kill 或 nohup:
- 重启服务:sudo systemctl restart myapp.service
- 停止服务:sudo systemctl stop myapp.service
- 查看完整日志:journalctl -u myapp.service -n 100 -f(-n 控制行数,-f 实时跟踪)
- 列出所有已启用的服务:systemctl list-unit-files --type=service --state=enabled
- 禁用开机自启:sudo systemctl disable myapp.service
几个实用细节提醒
避免常见踩坑点:
- 脚本需有执行权限(chmod +x /path/to/script.sh),且首行指定解释器(如 #!/bin/bash)
- 如果服务需要环境变量,推荐在 [Service] 中用 Environment=KEY=VALUE 显式声明,不要依赖 shell 配置文件
- 工作目录默认是根目录,如需指定,加一行 WorkingDirectory=/your/app/path
- 若程序本身已实现 daemonize(如双 fork),应在 [Service] 中添加 Type=forking 并配合 PIDFile=,否则 systemd 可能误判状态










