CentOS 7 服务管理
CentOS 7 是 Red Hat Enterprise Linux(RHEL)的开源版本,广泛应用于服务器和云计算环境中,其服务管理主要依赖于 systemd,这是一个初始化系统和服务管理器,取代了旧版 SysVinit,Systemd 提供了更高效和灵活的服务管理功能,支持并发启动和依赖关系处理。
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
定义多个 Unit 构成的组,如multiuser.target
。
3. Device unit
代表硬件设备,如sda.device
。
4. Mount unit
文件系统的挂载点,如/home.mount
。
5. Automount unit
自动挂载点,如/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