进程管理(systemd)

一、进程管理(systemd)

1. systemd 是什么?

systemd 是一个 系统和服务管理器,用于:

  • 在 Linux 启动时初始化系统(替代传统的 SysVinit)。

  • 管理系统的 服务(services)、守护进程(daemons)、挂载点(mounts)、套接字(sockets) 等。

  • 提供 并行启动,加快系统启动速度。

  • 支持 依赖关系管理,确保服务按正确顺序启动。


2. systemctl 是什么?

3. systemd与systemctl 的关系?

  • systemctl 是 控制 systemd 的主要命令**。**

它们的关系可以类比为:

  • systemd → 相当于系统的"管家",负责启动、停止和管理服务。

  • systemctl → 相当于"管家的遥控器",用于向 systemd 发送命令(如启动、停止、重启服务等)。这么理解还是有点拗口,你就理解为**systemctl** 是**systemd**的工具之一就好了。

4.systemd的其他工具

|-------------------|--------------------------------|
| systemctl | 管理系统服务(启动/停止/重启/查看状态等) |
| journalctl | 查看和管理 systemd 日志(服务日志、内核日志等) |
| hostnamectl | 查看/修改主机名、操作系统信息(如发行版、内核版本等) |
| timedatectl | 管理系统时间和时区(设置 NTP 同步、修改时区等) |
| loginctl | 管理用户会话(查看登录用户、终止会话等) |

二、systemd的systemctl

1、查看系统有哪些服务文件

systemctl list-unit-files

2、systemctl的文件存储位置

systemctl是用来管理服务文件的,服务文件一般存储位置:

|--------------------------|---------------------|---|
| /lib/systemd/system | 服务器系统本身的服务文件 | |
| /etc/systemd/system/ | 自定义的服务文件(自己创建推荐放这里) | |
| /usr/lib/systemd/system/ | 通过包管理器安装软件存的服务文件 | |

3、如何查看一个服务文件(或者叫服务单元文件)位置

方法1:systemctl cat nginx.service

4、编辑服务文件

可以通过systemctl edit来编辑,如果报错了,会提示。但是edit我没玩明白啊

systemctl edit nginx.service

5、自定义一个服务文件

5.1创建一个shimiao.service文件

在/etc/systemd/system文件夹下创建一个shimiao.service文件

文件内容格式如下:

Unit

Description=mei10miaodayin

Service

ExecStart=/bin/bash /home/shi/shimiaotianjiawenjian.sh

Install

WantedBy=multi-user.target

部分 是否必须 作用
[Unit] ❌ 可选 定义服务的元信息(如描述、依赖关系等),如果没有特殊需求可以省略。
[Service] ✅ 必须 核心部分 ,定义服务的启动、停止、重启等行为(至少需要 ExecStart)。
[Install] ❌ 可选 定义服务的安装目标(如开机启动),如果不需要开机自启可以省略。

解释:我写了一个脚本,让他去执行脚本(脚本内容就是每10秒打印内容放在日志里)

5.2准备脚本和日志文件

5.3启动服务文件

root@192 system\]# systemctl daemon-reload #如果没有找到服务文件,可以重新加载就出来了 \[root@192 system\]# systemctl list-unit-files \|grep shi #查看是否可以找到 shimiao.service disabled \[root@192 system\]# systemctl start shimiao.service #启动 启动后可以看日志了 ![](https://i-blog.csdnimg.cn/direct/2495f03532ca4120be892fac5e416b39.png) ### 6、自定义tomcat开机自启动 #### 后台启动 6.1往服务器上传tomcat安装包,解压 6.2设置tomcat.service \[root@192 system\]# vi /etc/systemd/system/tomcat.service的内容如下 ```bash [Unit] Description=tomcat [Service] # 必须声明为 forking(因为 startup.sh 是后台启动),注意:注释一定不能写key和values后面 Type=forking ExecStart=/home/systemxuexi/apache-tomcat-9.0.80/bin/startup.sh # 异常退出时自动重 Restart=on-failure [Install] WantedBy=multi-user.target ``` **注释:** **systemd 需要明确知道哪个是真正的服务进程:** * **`Type=simple`:认为 `ExecStart` 启动的进程就是服务主进程** * **`Type=forking`:要求脚本返回子进程的PID** **遇到的坑:别在key和values后面写注释,可以写上面。** #### 前台启动 /home/systemxuexi/apache-tomcat-9.0.80/bin/startup.sh 是一个后端启动tomcat /home/systemxuexi/apache-tomcat-9.0.80/bin/catalina.sh run 是一个前端启动tomcat 设置tomcatrun.service服务文件 ```bash [Unit] #注释可以内容重复不强制校验 Description=tomcat [Service] # 必须声明是simple,因为是前端启动,启动的进程就是服务主进程 Type=simple ExecStart=/home/systemxuexi/apache-tomcat-9.0.80/bin/catalina.sh run # 异常退出时自动重 #Restart=on-failure [Install] WantedBy=multi-user.target ``` 然后 #更新服务文件 systemctl daemon-reload #查看未启动前的状态 systemctl status tomcatrun.service #启动 systemctl start tomcatrun.service 注意:前台启动tomcat,/home/systemxuexi/apache-tomcat-9.0.80/logs里面不会有日志,因为启动时已经打印出来了。但是通过后台启动可以有日志。 ### 7、.service其他常用的参数 |----------------------|----------|----------------------------------------------------| | **`Type=`** | 定义进程类型 | `Type=simple`(默认,前台进程) `Type=forking`(后台守护进程) | | **`Restart=`** | 设置自动重启条件 | `Restart=on-failure`(失败时重启) `Restart=always`(总是重启) | | **`User=`/`Group=`** | 指定运行用户/组 | `User=appuser` `Group=appgroup` | | **`等等......`** | | | ### 8、定义.timer服务 `.timer` 是 systemd 的一种单元文件类型,专门用于**定时触发任务** (类似 crontab 的替代方案)。它的核心作用是**按照设定的时间规则,自动启动对应的 `.service` 服务。** 1、设置脚本 [root@192 shi]# vi zidongyishimiaotianjiawenjian.sh #!/bin/bash # 定义输出文件路径 output_file="/home/shi/shi.log" # 获取当前时间 current_time=$(date "+%Y-%m-%d %H:%M:%S") # 要打印的内容 message="[${current_time}] 这是每4秒打印一次的日志信息" # 输出到控制台和文件 echo "$message" | tee -a "$output_file" 2、设置.service服务 ```bash [root@192 system]# vi zidingyishimiao.service [Unit] Description=mei1fenzhong [Service] ExecStart=/bin/bash /home/shi/zidongyishimiaotianjiawenjian.sh [Install] WantedBy=multi-user.target ``` 3、设置.timer服务文件 ```bash [root@192 system]# vi zidingyishimiao.timer [Unit] Description=mei10miaodayin [Timer] OnUnitActiveSec=1min Unit=zidingyishimiao.service [Install] WantedBy=timers.target ``` 4、启动.timer服务 \[root@192 system\]# systemctl start zidingyishimiao.timer **总结:作用就是.timer设置(自定义的时间)时间去执行.service文件。类似定时任务。** ### 9、**`journalctl使用`** | 特性 | `journalctl -f(查看服务的实时日志)` | `tail -f shi.log` | |------------|----------------------------|-----------------------------| | **日志来源** | systemd 管理的所有服务和系统日志 | 仅特定文件(如 `/path/to/shi.log`) | | **日志收集方式** | 二进制日志(由 journald 守护进程管理) | 纯文本文件 | | **时间范围** | 可查看历史日志(支持时间过滤) | 仅能查看文件现有内容 | | **多源聚合** | 支持同时过滤多个服务的日志 | 仅限单个文件 | | **权限要求** | 需要 root 查看系统级日志 | 依赖文件读写权限 | | **日志旋转处理** | 自动处理日志轮转 | 文件被轮转后可能丢失跟踪 | | **结构化查询** | 支持按字段过滤(如 `_PID=123`) | 只能通过文本匹配(如 `grep`) |

相关推荐
花小璇学linux4 分钟前
imx6ull-驱动开发篇1——字符设备驱动简介
linux·驱动开发·imx6ull·嵌入式软件
Clain15 分钟前
在多机运维过程中,最容易踩的几个坑
linux·运维·服务器
DARLING Zero two♡26 分钟前
【Linux操作系统】简学深悟启示录:Linux环境基础开发工具使用
linux·运维·服务器
程序员JerrySUN33 分钟前
Linux内核驱动开发核心问题全解
linux·运维·驱动开发
EulerBlind39 分钟前
【运维】HuggingFace缓存目录结构详解
运维·深度学习
new_abc1 小时前
net-snmp添加自定义mib树
服务器·前端·javascript
幻雨様1 小时前
UE5多人MOBA+GAS 30、技能升级机制
运维·服务器·ue5
love530love2 小时前
Windows 11 下 Anaconda 命令修复指南及常见问题解决
运维·ide·人工智能·windows·python·架构·conda
Joey_Chen2 小时前
【What · Why · How】浅析select/poll/epoll与IO多路复用
linux·服务器