Linux 创建 systemd 服务
在现代 Linux 系统中,服务的自启动与管理通常由 systemd 负责。本文介绍如何创建自定义的 systemd 服务,并通过 systemctl 对其进行启动、停止、重启和状态查看。
1. systemd 服务文件的位置
Linux 下有两个常见的服务目录:
/lib/systemd/system:系统自带服务目录/etc/systemd/system:自定义服务目录,通常用于存放用户自己编写的服务文件
一般情况下,自定义服务应放在 /etc/systemd/system,这样可以和系统内置服务分开管理。
2. 创建一个自定义服务
下面以 Redis 服务为例,演示如何创建一个 systemd 服务文件。
1 | |
服务文件内容示例如下:
1 | |
配置项说明
Description:服务描述After:表示该服务依赖哪些目标在前启动User:服务运行用户Type=forking:说明服务会在后台创建子进程并退出主进程WorkingDirectory:服务工作目录PIDFile:进程 ID 文件ExecStart:服务启动命令ExecReload:重载命令ExecStop:停止命令PrivateTmp=true:隔离临时目录WantedBy=multi-user.target:表示在多用户模式下启用该服务
3. 重新加载 systemd 配置
创建或修改服务文件后,需要重新加载 systemd 的配置列表:
1 | |
4. 管理服务
启动服务
1 | |
停止服务
1 | |
重启服务
1 | |
查看状态
1 | |
开机自启
1 | |
取消开机自启
1 | |
5. 以 nginx 为例的常见写法
如果你想创建一个 Nginx 服务,通常可以按如下方式写:
1 | |
然后执行:
1 | |
6. 常见问题与排查
1)服务启动失败
可以先查看日志或状态:
1 | |
2)服务一直处于 activating 或 failed 状态
检查以下几点:
ExecStart路径是否正确WorkingDirectory是否存在PIDFile是否能正确生成- 服务依赖的配置文件是否存在
3)服务没有开机自启
确认是否执行了:
1 | |
并检查是否在正确的目标下启用。
7. 实用建议
在实际运维中,建议:
- 将自定义服务统一放置在
/etc/systemd/system - 用
systemctl status和journalctl进行排查 - 服务启动命令尽量写成绝对路径
- 如果服务依赖数据库、网络或挂载点,确保
After配置合理
8. 总结
systemd 服务的创建本质上就是编写一个规范的服务描述文件,然后通过以下命令完成管理:
1 | |
掌握 systemd 服务管理方法后,就可以方便地把应用程序托管为系统服务,实现开机自启和稳定管理。
Linux 创建 systemd 服务
https://jgq12138.github.io/2023/06/19/linux_create_service/