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

一、****[Unit] 部分

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

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

运维小路

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

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

相关推荐
cominglately1 小时前
centos单机部署seata
linux·运维·centos
魏 无羡1 小时前
linux CentOS系统上卸载docker
linux·kubernetes·centos
CircleMouse1 小时前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos
Karoku0661 小时前
【k8s集群应用】kubeadm1.20高可用部署(3master)
运维·docker·云原生·容器·kubernetes
木子Linux2 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
mit6.8242 小时前
Ubuntu 系统下性能剖析工具: perf
linux·运维·ubuntu
鹏大师运维2 小时前
聊聊开源的虚拟化平台--PVE
linux·开源·虚拟化·虚拟机·pve·存储·nfs
watermelonoops2 小时前
Windows安装Ubuntu,Deepin三系统启动问题(XXX has invalid signature 您需要先加载内核)
linux·运维·ubuntu·deepin
阿甘知识库2 小时前
宝塔面板跨服务器数据同步教程:双机备份零停机
android·运维·服务器·备份·同步·宝塔面板·建站
滴水之功3 小时前
VMware OpenWrt怎么桥接模式联网
linux·openwrt