简明systemd服务管理指南:从入门到实战
简明systemd服务管理指南:从入门到实战
一、服务文件存储规范
systemd采用多级配置体系,关键目录说明:
目录路径 | 用途说明 | 优先级 |
---|---|---|
/usr/lib/systemd/system/ | 系统级服务(软件包默认安装) | 最低 |
/etc/systemd/system/ | 系统级服务(管理员自定义) | 最高 |
~/.config/systemd/user/ | 用户级服务(当前用户专属) | 用户级 |
📝 最佳实践:推荐将自定义服务文件存放在
/etc/systemd/system/
目录,避免系统更新覆盖配置。
二、服务文件编写详解(以Nginx为例)
完整配置文件示例
[Unit]
Description=Nginx Web Server
Documentation=https://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
配置段解析
1. [Unit] 单元控制
参数 | 说明 |
---|---|
Description | 服务描述(建议保持简洁,不超过60字符) |
Documentation | 服务文档链接(支持空格分隔多个URL) |
After/Before | 定义服务启动顺序(建议优先使用After确保依赖就绪) |
2. [Service] 服务主体
核心参数:
Type=forking
PIDFile=/run/nginx.pid
执行命令组:
ExecStartPre # 主命令执行前的预处理
ExecStart # 核心启动命令
ExecReload # 重载配置命令(默认发送SIGHUP)
ExecStop # 停止服务命令
高级配置:
PrivateTmp=true # 启用独立临时空间
Restart=on-failure # 失败自动重启(可选值:no/on-success/on-failure等)
User=nginx # 指定运行用户(需预先创建)
3. [Install] 安装配置
WantedBy=multi-user.target # 系统进入多用户模式时启动
Alias=webserver.service # 可设置服务别名(选填)
三、服务生命周期管理
1. 配置加载流程
# 重载服务配置(修改.service文件后必须执行)
sudo systemctl daemon-reload
# 设置开机自启
sudo systemctl enable nginx
# 取消开机自启
sudo systemctl disable nginx
2. 服务状态管理
命令 | 作用 | 等效操作 |
---|---|---|
systemctl start nginx | 立即启动服务 | service nginx start |
systemctl stop nginx | 立即停止服务 | service nginx stop |
systemctl restart nginx | 重启服务(强制中断) | - |
systemctl reload nginx | 热重载配置(不中断服务) | kill -HUP |
3. 日志监控技巧
# 实时追踪日志(Ctrl+C退出)
journalctl -f -u nginx
# 查看指定时间段的日志
journalctl -u nginx --since "2023-07-01" --until "2023-07-02"
# 按日志等级过滤(emerg/alert/crit/err等)
journalctl -u nginx -p err
四、排错指南
常见问题排查步骤:
- 检查配置语法:
nginx -t
- 查看服务状态:
systemctl status nginx -l
- 分析启动日志:
journalctl -u nginx --boot
- 验证端口监听:
ss -tunlp | grep :80
服务状态说明:
- loaded:单元配置已加载
- active(running):正常运行中
- active(exited):成功执行单次任务
- inactive:未运行
- failed:配置错误或执行失败
本文已在CentOS 7 实测验证,适用于大多数systemd兼容的Linux发行版。
写在最后:
❌ 你还在这样算排期吗?
撕日历、数周末、翻放假通知……
项目Deadline总算错?调休上班日漏算?
“明明该完成了,怎么又撞上节假日?”
✨ 现在,一切交给「 微信小程序:排期计算器 」!