HCRM博客

如何配置和管理CentOS 7中的服务以确保系统稳定运行?

CentOS 7 服务管理

CentOS 7 是 Red Hat Enterprise Linux(RHEL)的开源版本,广泛应用于服务器和云计算环境中,其服务管理主要依赖于 systemd,这是一个初始化系统和服务管理器,取代了旧版 SysVinit,Systemd 提供了更高效和灵活的服务管理功能,支持并发启动和依赖关系处理。

如何配置和管理CentOS 7中的服务以确保系统稳定运行?-图1
(图片来源网络,侵权删除)

systemctl 命令

1. 常用命令

命令 描述
systemctl start 启动指定的 unit
systemctl stop 停止指定的 unit
systemctl restart 重启指定的 unit
systemctl enaBLe 设置开机时自动启动该 unit
systemctl disable 取消开机时自动启动该 unit
systemctl status 查看 unit 的状态
systemctl isenabled 检查 unit 是否设置为开机启动
systemctl listunits type=service 列出所有已启动的服务单元

2. 示例

启动 httpd 服务
systemctl start httpd.service
停止 httpd 服务
systemctl stop httpd.service
重启 httpd 服务
systemctl restart httpd.service
开机时启用 httpd 服务
systemctl enable httpd.service
查看 httpd 服务状态
systemctl status httpd.service
查看当前系统中所有运行的服务单元
systemctl listunits type=service

Unit 类型

Systemd 中的 Unit 是各种资源的基本抽象单位,包括服务单元(Service units)、目标单元(Target units)、设备单元(Device units)等,以下是一些常见的 Unit 型:

1. Service unit

定义系统服务,如httpd.service

2. Target unit

如何配置和管理CentOS 7中的服务以确保系统稳定运行?-图2
(图片来源网络,侵权删除)

定义多个 Unit 构成的组,如multiuser.target

3. Device unit

代表硬件设备,如sda.device

4. Mount unit

文件系统的挂载点,如/home.mount

5. Automount unit

如何配置和管理CentOS 7中的服务以确保系统稳定运行?-图3
(图片来源网络,侵权删除)

自动挂载点,如/media/cdrom.automount

6. Path unit

文件或路径,如/etc/rc.local.path

7. Scope unit

不由 Systemd 启动的外部进程,如myscope.scope

8. Socket unit

进程间通信的 socket,如syslog.socket

9. Slice unit

进程组,如slice1.slice

10. Snapshot unit

Systemd 快照,可以切回某个快照,如snapshot.img

11. Swap unit

swap 文件,如swapfile.swap

12. Timer unit

定时器,如timer.timer

单个 Unit 状态查看

使用systemctl 命令可以查看单个 Unit 的状态:

查看 httpd 服务的状态
systemctl status httpd.service

输出示例:

● httpd.service The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 20230828 10:00:00 CDT; 1h 30min ago
   ...
 Main PID: 1234 (httpd)
   Memory: 20.0M
   CGroup: /system.slice/httpd.service
           ├─1234 /usr/sbin/httpd DFOREGROUND
           ├─1235 /usr/sbin/httpd DFOREGROUND
           └─1236 /usr/sbin/httpd DFOREGROUND

当前系统的所有 Unit 状态

使用以下命令可以列出当前系统中所有 Unit 的状态:

列出所有正在运行的 Unit
systemctl listunits
列出所有 Unit,包括没有找到配置文件的或者启动失败的
systemctl listunits all
列出所有没有运行的 Unit
systemctl listunits all state=inactive

依赖关系

Systemd 支持服务的依赖关系管理,可以使用以下命令查看和管理依赖关系:

列出某个 unit 的依赖关系
systemctl listdependencies <unit>
展开显示依赖关系树
systemctl listdependencies all <unit>
反向查询依赖关系,即哪些 unit 依赖于此 unit
systemctl listdependencies reverse <unit>

常见问题及解决方案(FAQs)

Q1: 如何查看某个服务是否在开机时自动启动?

A1: 使用systemctl isenabled 命令可以检查某个服务是否在开机时自动启动,要检查 httpd 服务是否在开机时自动启动,可以执行以下命令:

systemctl isenabled httpd.service

输出enabled 表示该服务在开机时会自动启动,输出disabled 表示不会自动启动。

Q2: 如何自定义一个 systemd 服务单元文件?

A2: 自定义一个 systemd 服务单元文件需要编辑一个 .service 文件并放置在/usr/lib/systemd/system 目录下,以下是一个创建 Tomcat 服务单元文件的示例:

创建 Tomcat 服务单元文件
vim /usr/lib/systemd/system/tomcat.service

在该文件中添加如下内容:

[Unit]
Description=Java Tomcat Project
After=network.target java.service
[Service]
Type=forking
User=tomcatuser
Group=tomcatuser
PIDFile=/var/run/tomcat8.pid
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
Restart=onfailure
RestartSec=5s
[Install]
WantedBy=multiuser.target

保存文件后,加载新的单元文件并设置开机自启动:

systemctl daemonreload
systemctl enable tomcat.service

然后你可以启动、停止或查看 Tomcat 服务的状态:

systemctl start tomcat.service
systemctl stop tomcat.service
systemctl status tomcat.service

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/1046.html

分享:
扫描分享到社交APP
上一篇
下一篇