1. 首页 > Linux教程 > 正文

Linux教程FG022-系统服务管理基础(systemd)

本文将详细介绍Linux系统服务管理的基础知识,包括systemd服务管理工具。风哥教程参考Linux官方文档System administration章节内容,为读者提供全面的系统服务管理指南。

参考Red Hat Enterprise Linux 10官方文档中的System administration章节

Part01-基础概念与理论知识

1.1 系统服务概述

系统服务是Linux系统中运行的后台程序,它们在系统启动时自动启动,为系统提供各种功能。服务管理是系统管理的重要组成部分,包括服务的启动、停止、重启等操作。更多视频教程www.fgedu.net.cn

1.2 systemd概述

systemd是Linux系统的初始化系统和服务管理器,它是现代Linux发行版的默认初始化系统。systemd提供了并行启动、依赖管理、日志集成等功能,大大提高了系统启动速度和服务管理效率。

1.3 服务单元

systemd使用单元(unit)来管理系统资源,包括服务(. service)、套接字(.socket)、挂载点(.mount)等。服务单元文件定义了服务的启动、停止、重启等行为。

Part02-生产环境规划与建议

2.1 服务管理建议

服务管理建议:

  • 只启用必要的服务
  • 配置服务自动启动
  • 监控服务运行状态
  • 配置服务依赖关系
  • 定期检查服务日志

2.2 服务优化建议

服务优化建议:

  • 优化服务启动顺序
  • 配置服务资源限制
  • 禁用不必要的服务
  • 配置服务超时时间
  • 优化服务配置参数

2.3 安全建议

服务管理的安全建议:

  • 限制服务访问权限
  • 配置服务运行用户
  • 配置服务资源限制
  • 监控服务异常行为
  • 定期更新服务软件

Part03-生产环境项目实施方案

3.1 服务基础操作

服务基础操作:

# 步骤1:查看所有服务
$ systemctl list-unit-files –type=service | head -20
UNIT FILE STATE
autovt@.service disabled
auditd.service enabled
chronyd.service enabled
crond.service enabled
dbus.service static
dm-event.service static
dmraid-activation.service static
dnf-makecache.service static
dnf-systemd.timer disabled
firewalld.service enabled
getty@.service enabled
initrd-cleanup.service static
initrd-parse-etc.service static
initrd-switch-root.service static
iprd.service static
kdump.service disabled

# 步骤2:查看运行中的服务
$ systemctl list-units –type=service –state=running
UNIT LOAD ACTIVE SUB DESCRIPTION
auditd.service loaded active running Security Auditing Service
chronyd.service loaded active running NTP client/server
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
firewalld.service loaded active running firewalld – dynamic firewall daemon
getty@tty1.service loaded active running Getty on tty1
NetworkManager.service loaded active running Network Manager
sshd.service loaded active running OpenSSH server daemon
systemd-journald.service loaded active running Journal Service
systemd-logind.service loaded active running User Login Management
systemd-udevd.service loaded active running Rule-based Manager for Device Events and Files

# 步骤3:查看服务状态
$ sudo systemctl status sshd
● sshd.service – OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-04-02 10:00:00 CST; 1h ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1234 (sshd)
Tasks: 1 (limit: 4915)
Memory: 5.2M
CGroup: /system.slice/sshd.service
└─1234 /usr/sbin/sshd -D

# 步骤4:启动服务
$ sudo systemctl start nginx
$ sudo systemctl status nginx
● nginx.service – The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2026-04-02 10:00:00 CST; 10s ago
Docs: man:nginx(8)
http://nginx.org/en/docs/
Main PID: 1235 (nginx)
Tasks: 3 (limit: 4915)
Memory: 3.5M
CGroup: /system.slice/nginx.service
├─1235 “nginx: master process”
├─1236 “nginx: worker process”
└─1237 “nginx: worker process”

# 步骤5:停止服务
$ sudo systemctl stop nginx
$ sudo systemctl status nginx
● nginx.service – The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: inactive (dead) since Wed 2026-04-02 10:00:00 CST; 10s ago
Docs: man:nginx(8)
http://nginx.org/en/docs/

# 步骤6:重启服务
$ sudo systemctl restart sshd
$ sudo systemctl status sshd
● sshd.service – OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-04-02 10:00:00 CST; 5s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1238 (sshd)
Tasks: 1 (limit: 4915)
Memory: 5.2M
CGroup: /system.slice/sshd.service
└─1238 /usr/sbin/sshd -D

# 步骤7:重载服务配置
$ sudo systemctl reload nginx
$ sudo systemctl status nginx
● nginx.service – The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2026-04-02 10:00:00 CST; 1h ago
Docs: man:nginx(8)
http://nginx.org/en/docs/
Main PID: 1235 (nginx)
Tasks: 3 (limit: 4915)
Memory: 3.5M
CGroup: /system.slice/nginx.service
├─1235 “nginx: master process”
├─1236 “nginx: worker process”
└─1237 “nginx: worker process”

3.2 服务启动管理

服务启动管理:

# 步骤1:启用服务自动启动
$ sudo systemctl enable nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.

# 步骤2:查看服务启动状态
$ systemctl is-enabled nginx
enabled

# 步骤3:禁用服务自动启动
$ sudo systemctl disable nginx
Removed /etc/systemd/system/multi-user.target.wants/nginx.service.

# 步骤4:查看服务启动状态
$ systemctl is-enabled nginx
disabled

# 步骤5:启用并启动服务
$ sudo systemctl enable –now nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.

# 步骤6:禁用并停止服务
$ sudo systemctl disable –now nginx
Removed /etc/systemd/system/multi-user.target.wants/nginx.service.

# 步骤7:查看所有启用的服务
$ systemctl list-unit-files –type=service | grep enabled
auditd.service enabled
chronyd.service enabled
crond.service enabled
dbus.service static
firewalld.service enabled
getty@.service enabled
NetworkManager.service enabled
sshd.service enabled
systemd-journald.service static
systemd-logind.service static
systemd-udevd.service static

3.3 服务依赖管理

服务依赖管理:

# 步骤1:查看服务依赖
$ systemctl show nginx | grep -i requires
Requires=network-online.target
Wants=system.slice

# 步骤2:查看服务被依赖情况
$ systemctl show nginx | grep -i wanted
WantedBy=multi-user.target

# 步骤3:查看服务启动顺序
$ systemctl list-dependencies nginx
nginx.service
● ├─network-online.target
│ └─NetworkManager-wait-online.service
└─system.slice

# 步骤4:查看目标依赖
$ systemctl list-dependencies multi-user.target
multi-user.target
● ├─auditd.service
● ├─chronyd.service
● ├─crond.service
● ├─firewalld.service
● ├─NetworkManager.service
● ├─sshd.service
● ├─systemd-logind.service
● └─systemd-udevd.service

# 步骤5:创建自定义服务
$ sudo vi /etc/systemd/system/fgedu-app.service
[Unit]
Description=FGEdu Application Service
After=network.target

[Service]
Type=simple
User=fgedu
Group=fgedu
WorkingDirectory=/fgedu/app
ExecStart=/usr/bin/python3 /fgedu/app/app.py
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

# 步骤6:重载systemd配置
$ sudo systemctl daemon-reload

# 步骤7:启动自定义服务
$ sudo systemctl start fgedu-app
$ sudo systemctl status fgedu-app
● fgedu-app.service – FGEdu Application Service
Loaded: loaded (/etc/systemd/system/fgedu-app.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2026-04-02 10:00:00 CST; 10s ago
Main PID: 1239 (python3)
Tasks: 1 (limit: 4915)
Memory: 15.2M
CGroup: /system.slice/fgedu-app.service
└─1239 /usr/bin/python3 /fgedu/app/app.py

# 步骤8:启用自定义服务
$ sudo systemctl enable fgedu-app
Created symlink /etc/systemd/system/multi-user.target.wants/fgedu-app.service → /etc/systemd/system/fgedu-app.service.

Part04-生产案例与实战讲解

4.1 企业服务管理案例

某企业服务管理的案例:

  • 管理内容:配置服务自动启动,优化服务启动顺序
  • 监控措施:监控服务运行状态,配置服务告警
  • 成果:服务管理规范化,系统启动时间缩短40%

4.2 服务监控脚本

服务监控脚本:

#!/bin/bash
# service_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

# 服务列表
SERVICES=(
“sshd”
“nginx”
“mariadb”
“redis”
“fgedu-app”
)

# 检查服务状态
echo “=== Service Status ===”
for SERVICE in “${SERVICES[@]}”; do
if systemctl is-active –quiet “$SERVICE”; then
echo “OK: $SERVICE is running”
else
echo “ERROR: $SERVICE is not running”

# 尝试启动服务
echo “Attempting to start $SERVICE…”
sudo systemctl start “$SERVICE”

if systemctl is-active –quiet “$SERVICE”; then
echo “OK: $SERVICE started successfully”
else
echo “ERROR: Failed to start $SERVICE”
fi
fi
done

# 查看服务详细信息
echo “”
echo “=== Service Details ===”
for SERVICE in “${SERVICES[@]}”; do
echo “”
echo “=== $SERVICE ===”
systemctl status “$SERVICE” –no-pager | head -15
done

# 执行脚本
$ chmod +x service_monitor.sh
$ ./service_monitor.sh
=== Service Status ===
OK: sshd is running
OK: nginx is running
OK: mariadb is running
OK: redis is running
OK: fgedu-app is running

=== Service Details ===

=== sshd ===
● sshd.service – OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-04-02 10:00:00 CST; 1h ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1234 (sshd)
Tasks: 1 (limit: 4915)
Memory: 5.2M
CGroup: /system.slice/sshd.service
└─1234 /usr/sbin/sshd -D

=== nginx ===
● nginx.service – The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2026-04-02 10:00:00 CST; 1h ago
Docs: man:nginx(8)
http://nginx.org/en/docs/
Main PID: 1235 (nginx)
Tasks: 3 (limit: 4915)
Memory: 3.5M
CGroup: /system.slice/nginx.service
├─1235 “nginx: master process”
├─1236 “nginx: worker process”
└─1237 “nginx: worker process”

4.3 服务优化脚本

服务优化脚本: from LinuxDBA视频:www.itpux.com

#!/bin/bash
# service_optimize.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

# 禁用不必要的服务
echo “Disabling unnecessary services…”
UNNECESSARY_SERVICES=(
“bluetooth.service”
“cups.service”
“avahi-daemon.service”
)

for SERVICE in “${UNNECESSARY_SERVICES[@]}”; do
if systemctl is-active –quiet “$SERVICE”; then
echo “Stopping $SERVICE…”
sudo systemctl stop “$SERVICE”
sudo systemctl disable “$SERVICE”
echo “OK: $SERVICE stopped and disabled”
else
echo “INFO: $SERVICE is not running”
fi
done

# 优化服务启动顺序
echo “”
echo “Optimizing service startup order…”
# 确保网络服务在应用服务之前启动
sudo systemctl set-default multi-user.target

# 配置服务资源限制
echo “”
echo “Configuring service resource limits…”
# 配置nginx服务资源限制
sudo mkdir -p /etc/systemd/system/nginx.service.d
sudo tee /etc/systemd/system/nginx.service.d/override.conf << 'EOF' [Service] LimitNOFILE=65535 LimitNPROC=4096 MemoryMax=512M EOF # 重载systemd配置 sudo systemctl daemon-reload # 重启nginx服务 echo "Restarting nginx service..." sudo systemctl restart nginx # 查看nginx服务状态 echo "" echo "=== Nginx Service Status ===" sudo systemctl status nginx # 查看系统启动时间 echo "" echo "=== System Boot Time ===" systemd-analyze systemd-analyze blame | head -10 # 执行脚本 $ chmod +x service_optimize.sh $ ./service_optimize.sh Disabling unnecessary services... INFO: bluetooth.service is not running INFO: cups.service is not running INFO: avahi-daemon.service is not running Optimizing service startup order... Configuring service resource limits... Restarting nginx service... === Nginx Service Status === ● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/nginx.service.d/override.conf Active: active (running) since Wed 2026-04-02 10:00:00 CST; 10s ago Docs: man:nginx(8) http://nginx.org/en/docs/ Main PID: 1240 (nginx) Tasks: 3 (limit: 4915) Memory: 3.5M CGroup: /system.slice/nginx.service ├─1240 "nginx: master process" ├─1241 "nginx: worker process" └─1242 "nginx: worker process" === System Boot Time === Startup finished in 2.345s (kernel) + 15.678s (userspace) = 18.023s multi-user.target 15.678s network.target 12.345s remote-fs.target 5.678s sysinit.target 3.456s basic.target 2.345s

Part05-风哥经验总结与分享

5.1 服务管理建议

风哥提示:服务管理的建议:

  • 最小化服务:只启用必要的服务,减少攻击面
  • 监控服务:监控服务运行状态,及时发现异常
  • 优化启动:优化服务启动顺序,提高启动速度
  • 配置依赖:合理配置服务依赖关系
  • 定期检查:定期检查服务状态和日志

5.2 常见问题与解决方案

服务管理的常见问题与解决方案:

  • 服务启动失败:查看服务日志,检查配置文件
  • 服务无法停止:检查服务依赖,强制停止服务
  • 服务启动慢:优化服务启动顺序,配置并行启动
  • 服务资源占用高:配置资源限制,优化服务配置

5.3 最佳实践

服务管理的最佳实践:

  • 建立服务管理制度
  • 使用脚本自动化服务管理
  • 配置服务监控和告警
  • 定期检查服务状态
  • 优化服务启动顺序和资源使用
生产环境建议:在生产环境中,建议建立完善的服务管理体系,包括服务配置、监控告警、优化调整等,以确保系统的稳定性和性能。学习交流加群风哥微信: itpux-com

通过本文的介绍,相信读者对Linux系统服务管理基础有了更全面的了解。掌握这些知识有助于更好地管理系统服务。学习交流加群风哥QQ113257174

更多学习教程公众号风哥教程itpux_com

from Linux:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息