Linux 运维必备:systemd 服务管理实战指南
【摘要】 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.target2. 实操部署步骤
假设我们有一个简单的 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)