Skip to content

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

📝 最佳实践

服务管理建议

  1. 定期检查失败的服务

    bash
    systemctl --failed
  2. 监控关键服务状态

    bash
    # 创建监控脚本
    #!/bin/bash
    for service in nginx ssh network-manager; do
        if ! systemctl is-active --quiet $service; then
            echo "警告: $service 服务未运行"
        fi
    done
  3. 备份重要配置

    bash
    # 定期备份系统服务配置
    sudo rsync -av /etc/systemd/system/ /backup/systemd/
  4. 使用服务模板

    bash
    # 为相似服务创建模板
    sudo cp /etc/systemd/system/[email protected] /etc/systemd/system/
    sudo systemctl enable [email protected]
    sudo systemctl enable [email protected]

下一步

掌握服务管理后,您可以继续学习:

  1. 网络配置 - 配置网络服务
  2. 防火墙配置 - 设置安全服务
  3. 日志管理 - 深度了解系统日志

想了解更多系统管理? 继续学习网络配置 →

基于 MIT 许可发布