一、进程管理(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 #启动
启动后可以看日志了

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) |