Debian 13 系统服务管理
本教程详细介绍如何在 Debian 13 中管理系统服务,包括 systemd 服务控制、开机启动项管理和系统优化。
🔧 systemd 基础
什么是 systemd
systemd 是现代 Linux 系统的初始化系统和服务管理器:
- PID 1:系统启动时的第一个进程
- 服务管理:启动、停止、重启服务
- 依赖关系:管理服务间的依赖
- 并行启动:提高系统启动速度
systemd 组件
bash
# 主要组件
systemctl # 服务控制命令
journalctl # 日志查看命令
systemd-analyze # 性能分析
timedatectl # 时间管理
hostnamectl # 主机名管理
loginctl # 登录会话管理
🚀 服务基本操作
查看服务状态
bash
# 查看所有服务状态
systemctl list-units --type=service
# 查看运行中的服务
systemctl list-units --type=service --state=running
# 查看失败的服务
systemctl list-units --type=service --state=failed
# 查看特定服务状态
systemctl status nginx
systemctl status ssh
systemctl status network-manager
启动和停止服务
bash
# 启动服务
sudo systemctl start nginx
# 停止服务
sudo systemctl stop nginx
# 重启服务
sudo systemctl restart nginx
# 重载配置(不重启服务)
sudo systemctl reload nginx
# 重载或重启(如果重载不支持则重启)
sudo systemctl reload-or-restart nginx
启用和禁用服务
bash
# 启用服务(开机自启动)
sudo systemctl enable nginx
# 禁用服务
sudo systemctl disable nginx
# 查看服务是否启用
systemctl is-enabled nginx
# 查看服务是否运行
systemctl is-active nginx
# 同时启用并启动
sudo systemctl enable --now nginx
# 同时禁用并停止
sudo systemctl disable --now nginx
📋 常用系统服务
网络服务
bash
# NetworkManager - 网络管理
systemctl status NetworkManager
sudo systemctl restart NetworkManager
# SSH 服务
systemctl status ssh
sudo systemctl enable ssh
# 防火墙服务
systemctl status ufw
sudo systemctl enable ufw
时间同步服务
bash
# NTP 时间同步
systemctl status systemd-timesyncd
sudo systemctl enable systemd-timesyncd
# 查看时间同步状态
timedatectl status
# 手动同步时间
sudo timedatectl set-ntp true
日志服务
bash
# systemd 日志服务
systemctl status systemd-journald
# 查看日志占用空间
journalctl --disk-usage
# 清理旧日志
sudo journalctl --vacuum-time=30d
sudo journalctl --vacuum-size=100M
电源管理
bash
# 电源管理守护进程
systemctl status systemd-logind
# 休眠和待机相关
systemctl status systemd-sleep
# 禁用休眠(如果不需要)
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
🔍 服务管理进阶
查看服务详细信息
bash
# 查看服务的配置文件
systemctl cat nginx
# 查看服务的依赖关系
systemctl list-dependencies nginx
# 查看依赖此服务的其他服务
systemctl list-dependencies nginx --reverse
# 查看服务的资源使用
systemctl show nginx
# 查看服务的进程树
systemctl status nginx -l
服务配置文件
bash
# 系统服务目录
ls /etc/systemd/system/
ls /lib/systemd/system/
# 用户服务目录
ls ~/.config/systemd/user/
# 重载 systemd 配置
sudo systemctl daemon-reload
创建自定义服务
创建一个简单的自定义服务:
bash
# 创建服务文件
sudo nano /etc/systemd/system/my-app.service
服务文件内容:
ini
[Unit]
Description=My Application
After=network.target
[Service]
Type=simple
User=myuser
WorkingDirectory=/home/myuser/myapp
ExecStart=/home/myuser/myapp/start.sh
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
启用自定义服务:
bash
# 重载配置
sudo systemctl daemon-reload
# 启用服务
sudo systemctl enable my-app.service
# 启动服务
sudo systemctl start my-app.service
# 查看状态
systemctl status my-app.service
⏱️ 定时任务管理
systemd 定时器
systemd 提供了比 cron 更强大的定时器功能:
bash
# 查看所有定时器
systemctl list-timers
# 查看定时器状态
systemctl status apt-daily.timer
# 创建定时器服务
sudo nano /etc/systemd/system/backup.service
定时任务服务文件:
ini
[Unit]
Description=Daily Backup
Wants=backup.timer
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
[Install]
WantedBy=multi-user.target
定时器文件:
bash
sudo nano /etc/systemd/system/backup.timer
ini
[Unit]
Description=Daily Backup Timer
Requires=backup.service
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
启用定时器:
bash
sudo systemctl daemon-reload
sudo systemctl enable backup.timer
sudo systemctl start backup.timer
传统 cron 服务
bash
# 安装 cron(如果未安装)
sudo apt install cron
# 启用 cron 服务
sudo systemctl enable cron
sudo systemctl start cron
# 编辑用户 crontab
crontab -e
# 查看用户 crontab
crontab -l
# 系统级 crontab
sudo nano /etc/crontab
🔧 启动优化
分析启动时间
bash
# 查看总启动时间
systemd-analyze
# 查看各阶段启动时间
systemd-analyze time
# 查看服务启动时间
systemd-analyze blame
# 查看启动关键路径
systemd-analyze critical-chain
# 生成启动图表
systemd-analyze plot > boot.svg
优化启动速度
bash
# 禁用不必要的服务
sudo systemctl disable bluetooth # 如果不使用蓝牙
sudo systemctl disable cups # 如果不使用打印机
sudo systemctl disable ModemManager # 如果不使用调制解调器
# 查看启动失败的服务
systemctl --failed
# 屏蔽不需要的服务(更彻底的禁用)
sudo systemctl mask bluetooth.service
并行启动优化
bash
# 查看服务依赖关系
systemctl list-dependencies graphical.target
# 减少不必要的依赖
# 编辑服务文件,移除不必要的 After= 或 Wants= 依赖
🔒 安全配置
服务安全加固
bash
# 查看服务的安全配置
systemctl show nginx | grep -E "NoNewPrivileges|PrivateTmp|ProtectHome"
# 创建安全的服务配置
sudo systemctl edit nginx
添加安全配置:
ini
[Service]
# 安全选项
NoNewPrivileges=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=strict
ReadWritePaths=/var/log/nginx /var/lib/nginx
用户服务管理
bash
# 启用用户服务持久化(允许用户服务在登出后继续运行)
sudo loginctl enable-linger username
# 管理用户服务
systemctl --user status
systemctl --user enable my-user-service
systemctl --user start my-user-service
📊 监控和日志
服务监控
bash
# 实时监控服务状态
watch -n 2 'systemctl list-units --type=service --state=failed'
# 监控特定服务
journalctl -u nginx -f
# 查看服务最近的日志
journalctl -u nginx --since "1 hour ago"
# 查看服务启动相关的日志
journalctl -u nginx --since today --until now
资源使用监控
bash
# 查看服务资源使用
systemctl status nginx -l
# 使用 systemd-cgtop 监控
systemd-cgtop
# 设置服务资源限制
sudo systemctl edit nginx
添加资源限制:
ini
[Service]
MemoryLimit=512M
CPUQuota=50%
TasksMax=50
🔄 备份和恢复
备份服务配置
bash
# 备份 systemd 配置
sudo tar -czf systemd-backup.tar.gz /etc/systemd/
# 备份特定服务配置
sudo cp /etc/systemd/system/nginx.service /backup/
# 列出所有启用的服务
systemctl list-unit-files --state=enabled > enabled-services.txt
恢复服务配置
bash
# 恢复配置文件
sudo tar -xzf systemd-backup.tar.gz -C /
# 重载配置
sudo systemctl daemon-reload
# 根据备份重新启用服务
while read service; do
sudo systemctl enable "$service"
done < enabled-services.txt
🆘 故障排除
常见问题
服务启动失败
bash
# 查看详细错误信息
systemctl status service-name -l
journalctl -u service-name
# 检查配置文件语法
systemd-analyze verify /etc/systemd/system/service-name.service
# 重置失败状态
sudo systemctl reset-failed service-name
服务依赖问题
bash
# 查看依赖关系
systemctl list-dependencies service-name
# 检查循环依赖
systemd-analyze verify
# 强制启动(忽略依赖)
sudo systemctl start service-name --no-deps
权限问题
bash
# 检查服务文件权限
ls -la /etc/systemd/system/service-name.service
# 修复权限
sudo chmod 644 /etc/systemd/system/service-name.service
sudo chown root:root /etc/systemd/system/service-name.service
📝 最佳实践
服务管理建议
定期检查失败的服务
bashsystemctl --failed
监控关键服务状态
bash# 创建监控脚本 #!/bin/bash for service in nginx ssh network-manager; do if ! systemctl is-active --quiet $service; then echo "警告: $service 服务未运行" fi done
备份重要配置
bash# 定期备份系统服务配置 sudo rsync -av /etc/systemd/system/ /backup/systemd/
使用服务模板
bash# 为相似服务创建模板 sudo cp /etc/systemd/system/[email protected] /etc/systemd/system/ sudo systemctl enable [email protected] sudo systemctl enable [email protected]
下一步
掌握服务管理后,您可以继续学习:
想了解更多系统管理? 继续学习网络配置 →