Linux系统-systemd

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

这是Linux进阶部分的最后一大章。讲完这一章以后,我们Linux进阶部分讲完以后,我们的Linux操作部分就算讲完了,后面的讲解就主要是Linux上的应用软件的讲解,包括虚拟化,容器,云原生,数据库,中间件等。Linux系统相关内容,主要从以下几个方面来讲解:

Linux系统-开关机

Linux系统-单用户模式

Linux系统-救援模式

Linux系统-僵尸&孤儿进程

Linux系统-systemd(本章节)

Linux系统-logrotate

Linux系统-发行版介绍

Linux系统-发行版rocky

Linux系统-发行版ubuntu

Linux系统-初始化

我们在讲解Linux系统-开关机的时候,讲过Linux在开机的过程中会执行init 进程,在不同的发行版及同发行版都是不一样的,而在centos7里面是使用systemd来进行系统初始化。

Systemd 是 Linux 系统的一套初始化系统和服务管理器。以下是关于 Systemd 的详细介绍:

一、主要功能

系统初始化

  • Systemd 负责在系统启动时初始化系统服务、挂载文件系统、启动网络等任务。它通过并行启动服务的方式,大大缩短了系统启动时间。

  • 定义了明确的启动目标(target),如多用户模式的multi-user.target等,方便用户和管理员了解系统的启动状态。

服务管理

  • 可以管理和监控系统中的各种服务。能够自动启动、停止和重启服务,并根据服务之间的依赖关系确保服务按正确的顺序启动。

  • 支持服务的启动类型设置,如自动启动、手动启动和禁用等,以满足不同的系统需求。

日志记录

  • Systemd 集成了日志记录功能,通过journald服务记录系统和服务的日志信息。可以方便地查看和检索日志,支持按时间、服务名称等条件进行过滤。

设备管理

  • 能够自动识别和处理系统中的设备,如在设备插入或移除时自动启动或停止相关的服务。

  • 可以根据设备的属性和需求动态地调整服务的配置。

二、优势特点

高效性

  • 采用并行启动服务的方式,极大地提高了系统的启动速度。相比传统的初始化系统,Systemd 能够更快地使系统进入可用状态。

  • 对服务的管理更加精细和高效,能够快速响应服务的状态变化。

灵活性

  • 支持多种服务配置方式,可以通过编写.service文件来定义服务的启动参数、依赖关系等。这些配置文件易于理解和修改,方便管理员进行系统定制。

  • 可以轻松地添加或删除服务,以及调整服务的启动顺序和依赖关系。

可靠性

  • 具有强大的故障检测和恢复机制。如果一个服务出现故障,Systemd 可以自动尝试重启服务或采取其他恢复措施,以确保系统的稳定性。

  • 严格的服务依赖管理,确保服务在依赖的资源可用时才启动,避免了因依赖关系错误而导致的系统故障。

统一管理

  • 将系统的初始化、服务管理、日志记录等功能集成在一个统一的框架下,方便管理员进行系统管理和维护。

  • 提供了一致的命令行工具和接口,使得对系统的操作更加简单和直观。

三、使用方法

服务管理命令

  • systemctl start <service_name>:启动一个服务。

  • systemctl stop <service_name>:停止一个服务。

  • systemctl restart <service_name>:重启一个服务。

  • systemctl status <service_name>:查看一个服务的状态。

  • systemctl enable <service_name>:设置一个服务在系统启动时自动启动。(添加或者删除都会有提示)

  • systemctl disable <service_name>:设置一个服务在系统启动时不自动启动。

2. 日志查看

使用journalctl命令可以查看系统和服务的日志。可以通过各种选项来过滤和检索日志,如按时间范围、服务名称、日志级别等进行查询。

四、实操

其实上面讲的内容,除了管理命令和日志查看,其他的离普通运维还是比较远的。我们来讲点实际的,如果我们是通过yum或者rpm安装的软件,如果这个软件是以服务方式来提供的,比如安装的nginx,tomcat ,mysql等软件,他会自动生成xxx.service的文件,我们只需要配置启动或开机启动即可。但是某些软件我们是通过编译安装或者通过二进制部署则没有默认的这个xxx.service的,如果我们想把我们自己软件或者其他开源软件也以systemctl方式管控起来,则需要自己编写xxx.service文件。

在 Systemd 中,手工创建的 .service 文件通常可以放在两个主要目录中:/etc/systemd/system//usr/lib/systemd/system/。这两个目录有以下区别:

  1. **/etc/systemd/system/**用户自定义配置:这个目录主要用于存放用户自定义的服务配置文件。当你需要对系统中的某个服务进行特殊配置或者创建自己的服务时,可以将 .service 文件放在这个目录下。

  2. 优先级较高:Systemd 在读取服务配置文件时,会优先读取 /etc/systemd/system/ 目录下的文件。这意味着如果你在这个目录下创建了一个与系统默认服务同名的 .service 文件,Systemd 将使用这个自定义的配置文件而不是 /usr/lib/systemd/system/ 目录下的默认配置。

  3. 灵活性强:由于这个目录是用户可编辑的,你可以根据自己的需求随时修改服务配置。例如,你可以调整服务的启动参数、依赖关系、环境变量等。

  4. 下面是我们为手工编译的nginx定义的service文件(你可以根据你的实际情况调整和修改)。

    Unit\] Description=Nginx Web Server After=network.target remote-fs.target nss-lookup.target \[Service\] Type=forking PIDFile=/var/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop Restart=on-failure RestartSec=5 \[Install\] WantedBy=multi-user.target

  5. Description:对服务的简单描述,这里是 "Nginx Web Server"。

  6. After:指定此服务应该在哪些系统目标之后启动,这里确保在网络和文件系统等基础服务准备好之后再启动 Nginx,几乎所有的服务都会依赖网络服务,主要因为我们添加的服务几乎都是网络服务。

二、****[Service] 部分

  1. Type=forking:表示 Nginx 以派生(fork)的方式运行,即启动后父进程会退出,留下子进程继续运行。用得比较多的还有Type=simple。

  2. PIDFile:指定 Nginx 进程 ID 文件的路径。

  3. ExecStartPre:在启动服务之前执行的命令,这里是对 Nginx 配置文件进行测试,确保配置正确。

  4. ExecStart:启动 Nginx 服务的命令,指定 Nginx 配置文件的路径。

  5. ExecReload:重新加载 Nginx 配置的命令。

  6. ExecStop:停止 Nginx 服务的命令。

  7. Restart=on-failure:表示当服务出现故障时自动重启。

  8. RestartSec=5:指定在服务出现故障后等待 5 秒再进行重启尝试。

三、****[Install] 部分

  1. WantedBy=multi-user.target:表示此服务在多用户模式下被需要,当系统进入多用户模式时,Systemd 会自动启动这个服务。

要使用这个服务文件,执行以下步骤:

bash 复制代码
systemctl daemon-reload
# 让Systemd 重新加载服务定义。

systemctl start nginx 
#启动 Nginx 服务。

systemctl stop nginx 
# 停止服务。

systemctl restart nginx 
# 重启服务。

systemctl status nginx
# 查看服务状态等。

总结

1.我们可以通过配置xx.service把自己的业务纳入systemctl进行统一管控。

2.我们还可以根据需要配置是否进行开机启动,如果涉及到依赖关系,还可以决定谁先启动,谁后启动,如果出现意外则可以自动重启等功能。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

相关推荐
晨曦夜月21 小时前
头文件与目标文件的关系
linux·开发语言·c++
Xyz996_21 小时前
Ansible进行Nginx编译安装的详细步骤
运维·ansible
白仑色21 小时前
java中的anyMatch和allMatch方法
java·linux·windows·anymatch·allmatch
云和数据.ChenGuang21 小时前
自动化运维工程师之ansible启动rpcbind和nfs服务
运维·服务器·运维技术·数据库运维工程师·运维教程
yimengsama21 小时前
VMWare虚拟机如何连接U盘
linux·运维·服务器·网络·windows·经验分享·远程工作
松涛和鸣21 小时前
32、Linux线程编程
linux·运维·服务器·c语言·开发语言·windows
云和数据.ChenGuang21 小时前
AB压力测试运维工程师技术教程
运维·压力测试·运维工程师
꧁坚持很酷꧂21 小时前
把虚拟机Ubuntu中的USB设备名称改为固定名称
linux·数据库·ubuntu
少年白char21 小时前
【AI漫剧】开源自动化AI漫剧生成工具 - 从文字到影像:AI故事视频创作的全新可能
运维·人工智能·自动化
容智信息21 小时前
容智Report Agent智能体驱动财务自动化,从核算迈向价值创造
大数据·运维·人工智能·自然语言处理·自动化·政务