Linux 运维必备:systemd 服务管理实战指南

举报
yd_239025793 发表于 2026/10/14 00:23:26 2026/10/14
【摘要】 systemd 是现代 Linux 系统的标准初始化系统与服务管理器。本文将介绍 systemd 的核心概念、常用 systemctl 管理命令、自定义 Service 单元文件配置及实战步骤,帮助运维人员高效管理服务并排查常见问题。

背景:为什么需要 systemd?

在传统的 Linux 系统中,SysVinit 串行启动服务,导致启动慢且管理复杂。systemd 引入了并行启动、按需激活以及基于 cgroups 的资源控制,成为了现代主流发行版(如 CentOS 7+、Ubuntu 16.04+)的标准 init 系统。其核心命令行工具 systemctl 几乎接管了所有的服务管理工作。

一、systemd 常用管理命令

运维人员日常操作中最频繁使用的就是 systemctl 命令。以下为常用命令集合:

# 启动、停止、重启、重载服务
systemctl start nginx.service
systemctl stop nginx.service
systemctl restart nginx.service
systemctl reload nginx.service

# 查看服务状态
systemctl status nginx.service

# 设置开机自启与取消开机自启
systemctl enable nginx.service
systemctl disable nginx.service

# 查看所有已启动的服务
systemctl list-units --type=service

# 查看服务开机自启状态
systemctl is-enabled nginx.service

二、编写自定义 systemd 服务

在实际运维中,我们经常需要将自研应用或第三方编译程序托管给 systemd。这需要编写以 .service 结尾的 Unit 文件。

1. Service 文件结构解析

一个标准的 Service 文件通常包含 [Unit]、[Service] 和 [Install] 三个部分。

[Unit]
Description=My Custom Application
After=network.target

[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/app.py
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

2. 实操部署步骤

假设我们有一个简单的 Python 脚本需要作为后台服务运行,操作步骤如下:

  • 创建应用目录及测试脚本:
    mkdir -p /opt/myapp
    cat > /opt/myapp/app.py << 'EOF'
    import time
    while True:
        print("App is running...")
        time.sleep(5)
    EOF
  • 创建 systemd Unit 文件:
    cat > /etc/systemd/system/myapp.service << 'EOF'
    [Unit]
    Description=My Python Test App
    After=network.target
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/python3 /opt/myapp/app.py
    Restart=always
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=myapp
    
    [Install]
    WantedBy=multi-user.target
    EOF
  • 重新加载 systemd 配置并启动服务:
    systemctl daemon-reload
    systemctl start myapp.service
    systemctl enable myapp.service
    systemctl status myapp.service

三、日志管理与进阶配置

systemd 自带了日志收集组件 journald,通过 journalctl 可以方便地查看服务日志,无需再依赖传统的 syslog 文件。

# 查看指定服务的日志
journalctl -u myapp.service

# 实时滚动查看最新日志
journalctl -u myapp.service -f

# 查看今天的日志
journalctl -u myapp.service --since today

对于关键业务,可以在 [Service] 段中添加资源限制,防止单个服务耗尽主机资源:

[Service]
# 限制内存最大使用量为 500MB
MemoryMax=500M
# 限制 CPU 使用率(例如 1.5 个核)
CPUQuota=150%

四、注意事项与常见问题

  • Type 参数选择:默认为 Type=simple,适用于前台运行的程序。如果你的程序会 fork 出子进程然后退出(即传统守护进程方式),必须设置为 Type=forking,否则 systemd 会认为服务已停止。
  • 环境变量:在 Service 文件中添加环境变量应使用 Environment="VAR=VALUE",或者使用 EnvironmentFile=/path/to/env 指定文件。直接在脚本中 export 可能无法被 systemd 识别。
  • 修改配置后必须重载:每次修改或新建 .service 文件后,必须执行 systemctl daemon-reload,否则 systemd 无法感知新配置。
  • 权限问题:注意 User 和 Group 指定的运行用户需要对 WorkingDirectory 及 ExecStart 指向的文件有读取和执行权限。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。