当前位置: 首页 > news >正文

进程管理(systemd)

一、进程管理(systemd)

1. systemd 是什么?

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

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

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

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

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


2. systemctl 是什么?

3. systemd与systemctl 的关系?

  • systemctl 是 控制 systemd 的主要命令

它们的关系可以类比为:

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

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

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的内容如下

[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服务文件

[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服务

[root@192 system]# vi zidingyishimiao.service
[Unit]
Description=mei1fenzhong[Service]
ExecStart=/bin/bash /home/shi/zidongyishimiaotianjiawenjian.sh[Install]
WantedBy=multi-user.target

3、设置.timer服务文件

[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
http://www.dtcms.com/a/302259.html

相关文章:

  • 企业微信服务商创建第三方应用配置数据回调url和指令回调url的java代码实现
  • Python系统交互库全解析
  • Entity Framework Core (EF Core) 中Database
  • 归雁思维:解锁自然规律与人类智慧的桥梁
  • Online Proofing System(OPS)在线校样系统使用说明
  • Linux进程概念(五)进程地址空间
  • Leaflet 综合案例 - 路径规划
  • 医疗领域非结构化数据处理技术突破与未来演进
  • svn与git Merge重要区别讲解
  • C# 提取字符串 指定开始和结尾字符
  • 人机交互打字游戏
  • C#高级:通过修改注册表实现系统代理服务器的启用、编辑和禁用
  • 【计算机网络】计算机网络中光猫、交换机、路由器、网关、MAC地址是什么?两台电脑是如何联通的?
  • 承装修试二级承包范围
  • 3DGRUT: 革命性的3D高斯粒子光线追踪与混合光栅化技术深度解析
  • mac电脑如何关闭防火墙
  • 反欺诈系统:Oracle 到 ES 迁移实战
  • keepalive
  • 8.异常处理--Exceptions
  • 代码随想录Day32:动态规划(斐波那契数、爬楼梯、使用最小花费爬楼梯)
  • 字节跳动开源Coze,开启AI Agent开发新时代?
  • 我从 Web2 转型到 Web3 的 9 条经验总结
  • linux命令grep的实际应用
  • Leetcode——11. 盛最多水的容器
  • kubectl中的yaml配置详解
  • 前段面试题新版
  • 从fork到exit:剖析Linux进程的诞生、消亡机制
  • 零基础部署网站?使用天翼云服务搭建语音听写应用系统
  • C++ list 容器全解析:从构造到模拟实现的深度探索----《Hello C++ Wrold!》(16)--(C/C++)
  • [机缘参悟-237]:AI人工神经网络与人类的神经网络工作原理的相似性