本文档风哥主要介绍systemd运行目标管理的使用,包括target的概念、target与runlevel的区别、常用target介绍、运行目标管理在生产环境的规划、运行目标管理最佳实践、运行目标管理安全配置建议、target基础操作详解、target高级使用技巧、自定义target实战、切换运行目标实战案例、创建自定义target实战案例、运行目标故障排查与解决等内容,参考Red Hat Enterprise Linux 10官方文档,适合Linux运维人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 target的概念
target是systemd中的运行目标单元,用于定义系统的运行状态。target可以看作是一组服务的集合,当系统切换到某个target时,会自动启动或停止相应的服务。target取代了传统SysVinit中的runlevel概念,提供了更灵活的系统状态管理方式。更多视频教程www.fgedu.net.cn
- 定义系统运行状态
- 包含一组服务的集合
- 支持依赖关系
- 可以相互继承
- 支持并行启动
1.2 target与runlevel的区别
target与runlevel的区别:
- 命名方式:target使用描述性名称,runlevel使用数字
- 依赖关系:target支持复杂的依赖关系,runlevel不支持
- 并行启动:target支持并行启动,runlevel串行启动
- 灵活性:target更灵活,可以自定义
- 兼容性:systemd提供runlevel兼容性
1.3 常用target介绍
常用target介绍:
- poweroff.target:关机(对应runlevel 0)
- rescue.target:救援模式(对应runlevel 1)
- multi-user.target:多用户模式(对应runlevel 3)
- graphical.target:图形界面模式(对应runlevel 5)
- reboot.target:重启(对应runlevel 6)
- emergency.target:紧急模式
Part02-生产环境规划与建议
2.1 运行目标管理在生产环境的规划
运行目标管理在生产环境的规划要点:
– 选择合适的默认target
– 配置服务依赖关系
– 定期检查target配置
– 备份target配置文件
– 记录配置变更历史
# 运行目标管理注意事项
– 了解target依赖关系
– 配置正确的启动顺序
– 避免循环依赖
– 测试target切换
– 记录target配置
2.2 运行目标管理最佳实践
运行目标管理最佳实践:
- 默认target:选择合适的默认target
- 依赖管理:合理配置服务依赖关系
- 测试验证:测试target切换
- 备份配置:备份target配置文件
- 监控告警:配置监控告警
2.3 运行目标管理安全配置建议
运行目标管理安全配置建议:
- 最小服务:只启动必要的服务
- 权限控制:使用最小权限
- 日志审计:启用日志审计
- 访问控制:配置访问控制
- 定期审查:定期审查target配置
Part03-生产环境项目实施方案
3.1 target基础操作详解
3.1.1 查看当前target
# systemctl get-default
multi-user.target
# 查看当前运行的target
# systemctl list-units –type=target
UNIT LOAD ACTIVE SUB DESCRIPTION
basic.target loaded active active Basic System
cryptsetup.target loaded active active Local Encrypted Volumes
getty.target loaded active active Login Prompts
local-fs-pre.target loaded active active Local File Systems (Pre)
local-fs.target loaded active active Local File Systems
multi-user.target loaded active active Multi-User System
network-online.target loaded active active Network is Online
network-pre.target loaded active active Network (Pre)
network.target loaded active active Network
nfs-client.target loaded active active NFS client services
paths.target loaded active active Paths
remote-fs-pre.target loaded active active Remote File Systems (Pre)
remote-fs.target loaded active active Remote File Systems
slices.target loaded active active Slices
sockets.target loaded active active Sockets
sound.target loaded active active Sound Card
swap.target loaded active active Swap
sysinit.target loaded active active System Initialization
timers.target loaded active active Timers
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
19 loaded units listed. Pass –all to see loaded but inactive units, too.
To show all installed unit files use ‘systemctl list-unit-files’.
3.1.2 切换target
# systemctl isolate rescue.target
# 切换到multi-user.target(多用户模式)
# systemctl isolate multi-user.target
# 切换到graphical.target(图形界面模式)
# systemctl isolate graphical.target
# 切换到emergency.target(紧急模式)
# systemctl isolate emergency.target
3.1.3 设置默认target
# systemctl set-default multi-user.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.
# 验证默认target已设置
# systemctl get-default
multi-user.target
# 设置默认target为graphical.target
# systemctl set-default graphical.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/graphical.target.
# 验证默认target已设置
# systemctl get-default
graphical.target
3.1.4 查看target依赖关系
# systemctl list-dependencies multi-user.target
multi-user.target
● ├─atd.service
● ├─auditd.service
● ├─chronyd.service
● ├─crond.service
● ├─dbus.service
● ├─firewalld.service
● ├─getty.target
● ├─irqbalance.service
● ├─NetworkManager.service
● ├─rsyslog.service
● ├─sshd.service
● ├─systemd-ask-password-wall.path
● ├─systemd-logind.service
● ├─systemd-update-utmp-runlevel.service
● ├─systemd-user-sessions.service
● └─basic.target
● ├─alsa-restore.service
● ├─alsa-state.service
● ├─firewalld.service
…
# 查看graphical.target的依赖关系
# systemctl list-dependencies graphical.target
graphical.target
● ├─accounts-daemon.service
● ├─gdm.service
● ├─rtkit-daemon.service
● └─multi-user.target
● ├─atd.service
● ├─auditd.service
…
3.2 target高级使用技巧
3.2.1 查看target详细信息
# systemctl cat multi-user.target
# /usr/lib/systemd/system/multi-user.target
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
# 查看graphical.target详细信息
# systemctl cat graphical.target
# /usr/lib/systemd/system/graphical.target
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target display-manager.service
AllowIsolate=yes
3.2.2 查看所有可用的target
# systemctl list-unit-files –type=target
UNIT FILE STATE
basic.target static
bluetooth.target static
cryptsetup-pre.target static
cryptsetup.target static
ctrl-alt-del.target alias
default.target alias
emergency.target static
final.target static
getty-pre.target static
getty.target static
graphical.target static
halt.target disabled
hibernate.target static
hybrid-sleep.target static
initrd-fs.target static
initrd-root-fs.target static
initrd-switch-root.target static
initrd.target static
kbrequest.target disabled
kexec.target disabled
local-fs-pre.target static
local-fs.target static
machine.slice static
multi-user.target static
network-online.target static
network-pre.target static
network.target static
nfs-client.target enabled
paths.target static
poweroff.target disabled
printer.target static
reboot.target disabled
remote-cryptsetup.target disabled
remote-fs-pre.target static
remote-fs.target enabled
rescue.target static
rpcbind.target static
runlevel0.target alias
runlevel1.target alias
runlevel2.target alias
runlevel3.target alias
runlevel4.target alias
runlevel5.target alias
runlevel6.target alias
shutdown.target static
sigpwr.target static
sleep.target static
slices.target static
smartcard.target static
sockets.target static
sound.target static
suspend-then-hibernate.target static
suspend.target static
swap.target static
sysinit.target static
system-update-pre.target static
system-update.target static
timers.target static
umount.target static
62 unit files listed.
3.3 自定义target实战
3.3.1 创建自定义target
# cat > /etc/systemd/system/custom-web.target << 'EOF' [Unit] Description=Custom Web Server Target Requires=multi-user.target After=multi-user.target AllowIsolate=yes [Install] WantedBy=graphical.target EOF # 2. 创建依赖服务 # cat > /etc/systemd/system/custom-web.service << 'EOF' [Unit] Description=Custom Web Server After=network.target PartOf=custom-web.target [Service] Type=simple ExecStart=/usr/bin/python3 -m http.server 8080 Restart=always [Install] WantedBy=custom-web.target EOF # 3. 重新加载systemd配置 # systemctl daemon-reload # 4. 启用服务 # systemctl enable custom-web.service Created symlink /etc/systemd/system/custom-web.target.wants/custom-web.service → /etc/systemd/system/custom-web.service. # 5. 切换到自定义target # systemctl isolate custom-web.target # 6. 查看当前target # systemctl get-default graphical.target # 7. 查看自定义target状态 # systemctl status custom-web.target ● custom-web.target - Custom Web Server Target Loaded: loaded (/etc/systemd/system/custom-web.target; disabled; vendor preset: disabled) Active: active since Thu 2026-03-31 10:00:00 CST; 5s ago Mar 31 10:00:00 localhost systemd[1]: Reached target Custom Web Server Target. # 8. 查看自定义target依赖关系 # systemctl list-dependencies custom-web.target custom-web.target ● └─custom-web.service ● └─network.target
Part04-生产案例与实战讲解
4.1 切换运行目标实战案例
4.1.1 完整切换流程
# systemctl get-default
graphical.target
# 2. 查看当前运行的服务
# systemctl list-units –type=service | grep -E “(gdm|display-manager)”
gdm.service loaded active running GNOME Display Manager
# 3. 切换到multi-user.target(关闭图形界面)
# systemctl isolate multi-user.target
# 4. 验证target已切换
# systemctl get-default
graphical.target
# 5. 查看当前运行的服务
# systemctl list-units –type=service | grep -E “(gdm|display-manager)”
(无输出,gdm服务已停止)
# 6. 设置默认target为multi-user.target
# systemctl set-default multi-user.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.
# 7. 验证默认target已设置
# systemctl get-default
multi-user.target
# 8. 切换回graphical.target
# systemctl isolate graphical.target
# 9. 查看当前运行的服务
# systemctl list-units –type=service | grep -E “(gdm|display-manager)”
gdm.service loaded active running GNOME Display Manager
# 10. 恢复默认target为graphical.target
# systemctl set-default graphical.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/graphical.target.
# 11. 验证默认target已恢复
# systemctl get-default
graphical.target
4.2 创建自定义target实战案例
4.2.1 创建数据库服务器target
# cat > /etc/systemd/system/database-server.target << 'EOF' [Unit] Description=Database Server Target Requires=multi-user.target After=multi-user.target Wants=postgresql.service mysql.service redis.service AllowIsolate=yes [Install] WantedBy=multi-user.target EOF # 2. 重新加载systemd配置 # systemctl daemon-reload # 3. 启用数据库服务 # systemctl enable postgresql.service # systemctl enable mysql.service # systemctl enable redis.service # 4. 修改服务配置,使其属于database-server.target # systemctl edit postgresql.service # 添加: [Install] WantedBy=database-server.target # 5. 切换到数据库服务器target # systemctl isolate database-server.target # 6. 查看target状态 # systemctl status database-server.target ● database-server.target - Database Server Target Loaded: loaded (/etc/systemd/system/database-server.target; disabled; vendor preset: disabled) Active: active since Thu 2026-03-31 10:00:00 CST; 5s ago Mar 31 10:00:00 localhost systemd[1]: Reached target Database Server Target. # 7. 查看target依赖关系 # systemctl list-dependencies database-server.target database-server.target ● ├─mysql.service ● ├─postgresql.service ● ├─redis.service ● └─multi-user.target # 8. 验证数据库服务已启动 # systemctl status postgresql.service ● postgresql.service - PostgreSQL database server Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2026-03-31 10:00:00 CST; 5s ago # systemctl status mysql.service ● mysql.service - MySQL database server Loaded: loaded (/usr/lib/systemd/system/mysql.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2026-03-31 10:00:00 CST; 5s ago # systemctl status redis.service ● redis.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2026-03-31 10:00:00 CST; 5s ago
4.3 运行目标故障排查与解决
4.3.1 target切换失败
# 分析步骤:
# 1. 查看错误信息
# systemctl isolate custom.target
Failed to isolate unit: Unit custom.target does not exist or is not loaded.
# 2. 检查target文件是否存在
# ls -la /etc/systemd/system/custom.target
ls: cannot access ‘/etc/systemd/system/custom.target’: No such file or directory
# 3. 创建target文件
# cat > /etc/systemd/system/custom.target << 'EOF'
[Unit]
Description=Custom Target
Requires=multi-user.target
After=multi-user.target
AllowIsolate=yes
EOF
# 4. 重新加载systemd配置
# systemctl daemon-reload
# 5. 验证target已加载
# systemctl list-unit-files --type=target | grep custom
custom.target disabled
# 6. 切换到target
# systemctl isolate custom.target
# 7. 验证target已切换
# systemctl status custom.target
● custom.target - Custom Target
Loaded: loaded (/etc/systemd/system/custom.target; disabled; vendor preset: disabled)
Active: active since Thu 2026-03-31 10:00:00 CST; 5s ago
Mar 31 10:00:00 localhost systemd[1]: Reached target Custom Target.
# 8. 预防措施
# - 确保target文件存在
# - 重新加载systemd配置
# - 验证target已加载
# - 检查target配置语法
Part05-风哥经验总结与分享
5.1 运行目标管理经验总结
运行目标管理经验总结:
- 默认target:选择合适的默认target
- 依赖管理:合理配置服务依赖关系
- 测试验证:测试target切换
- 备份配置:备份target配置文件
- 监控告警:配置监控告警
5.2 运行目标管理检查清单
运行目标管理检查清单:
- 配置前:了解target依赖关系
- 配置时:检查target配置语法
- 配置后:验证target状态
- 使用时:定期检查target状态
- 维护时:定期更新target配置
- 故障排查:检查target文件、重新加载配置
5.3 运行目标管理相关工具推荐
运行目标管理相关工具推荐:
- systemctl:systemd控制命令
- systemd-analyze:systemd分析工具
- journalctl:systemd日志查看命令
- runlevel:查看当前运行级别
- who -r:查看当前运行级别
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
