searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

systemd介绍

2023-03-29 11:06:48
23
0

systemd提供了一个系统和服务管理器,运行为PID 1并负责启动其他程序。systemd使用socket和D-Bus来开启服务们提供基于守护进程的按需启动策略,保留了Linux CGroups的进程追踪功能,支持快照和系统状态恢复,维护挂载和自挂载点,实现了各服务器间丛属于关系的一个更为精细的逻辑控制,。systemd无需经过任何修改便可以替代system V init。其功能包括:

  • 支持并行化任务
  • 同时采用socket式与D-Bus总线式激活服务
  • 按需启动守护进程
  • 利用Linux的Cgroups监视进程
  • 支持快照和系统恢复
  • 维护挂载点和自动挂载点
  • 各服务间基于依赖关系及逆行精密控制

Systemd的服务管理:

  • 单元类型

unit是systemd管理服务的基本单元,可以认为每个服务就是一个unit,并使用一个unit文件定义。在unit文件中需要包含相应服务的描述、属性以及需要运行服务的命令。systemd主要有如下单元类型:

  • 系统服务(.service)
  • 挂在点(.mount)
  • 自动挂载点(.mutomount)
  • 套接字(.socket)
  • 系统设备(.device)
  • 交换分区(.swap)
  • 文件路径(.path)
  • 启动目标(.target)
  • 计时器(.timer)
  • 不是由systend启动的外部进程(.scope)
  • 进程组(.slice)
  • Systemd快照(.snapshot)
  • Target

target是systemd中用于指定服务组的启动方式,相当于SysV-init中的运行级别。每次系统启动时都会运行与当前系统具有同级别 Target 关联的所有服务,如果服务不需要跟随系统自动启动,则完全可以忽略这个 Target 的内容。通常来说,大多数 Linux 用户平时使用的都是 多用户模式 这个级别,对应的 Target 值为 multi-user.target,它又一个等效的可用值是 default.target。

# 查看当前系统的所有 Target

$ systemctl list-unit-files --type=target

 

# 查看一个 Target 包含的所有 Unit

$ systemctl list-dependencies multi-user.target

 

# 查看启动时的默认 Target

$ systemctl get-default

 

# 设置启动时的默认 Target

$ sudo systemctl set-default multi-user.target

 

# 切换 Target 时,默认不关闭前一个 Target 启动的进程,

# systemctl isolate 命令改变这种行为,

# 关闭前一个 Target 里面所有不属于后一个 Target 的进程

$ sudo systemctl isolate multi-user.target

  • 日志管理

Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用 journalctl 一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是 /etc/systemd/journald.conf。

# 查看所有日志(默认情况下 ,只保存本次启动的日志)

$ sudo journalctl

 

# 查看内核日志(不显示应用日志)

$ sudo journalctl -k

 

# 查看系统本次启动的日志

$ sudo journalctl -b

$ sudo journalctl -b -0

 

# 查看上一次启动的日志(需更改设置)

$ sudo journalctl -b -1

 

# 查看指定时间的日志

$ sudo journalctl --since="2012-10-30 18:17:16"

$ sudo journalctl --since "20 min ago"

$ sudo journalctl --since yesterday

$ sudo journalctl --since "2015-01-10" --until "2015-01-11 03:00"

$ sudo journalctl --since 09:00 --until "1 hour ago"

 

# 显示尾部的最新10行日志

$ sudo journalctl -n

 

# 显示尾部指定行数的日志

$ sudo journalctl -n 20

 

# 实时滚动显示最新日志

$ sudo journalctl -f

 

# 查看指定服务的日志

$ sudo journalctl /usr/lib/systemd/systemd

 

# 查看指定进程的日志

$ sudo journalctl _PID=1

 

# 查看某个路径的脚本的日志

$ sudo journalctl /usr/bin/bash

 

# 查看指定用户的日志

$ sudo journalctl _UID=33 --since today

 

# 查看某个 Unit 的日志

$ sudo journalctl -u nginx.service

$ sudo journalctl -u nginx.service --since today

 

# 实时滚动显示某个 Unit 的最新日志

$ sudo journalctl -u nginx.service -f

 

# 合并显示多个 Unit 的日志

$ journalctl -u nginx.service -u php-fpm.service --since today

 

# 查看指定优先级(及其以上级别)的日志,共有8级

# 0: emerg

# 1: alert

# 2: crit

# 3: err

# 4: warning

# 5: notice

# 6: info

# 7: debug

$ sudo journalctl -p err -b

 

# 日志默认分页输出,--no-pager 改为正常的标准输出

$ sudo journalctl --no-pager

 

# 以 JSON 格式(单行)输出

$ sudo journalctl -b -u nginx.service -o json

 

# 以 JSON 格式(多行)输出,可读性更好

$ sudo journalctl -b -u nginx.serviceqq

 -o json-pretty

 

# 显示日志占据的硬盘空间

$ sudo journalctl --disk-usage

 

# 指定日志文件占据的最大空间

$ sudo journalctl --vacuum-size=1G

 

# 指定日志文件保存多久

$ sudo journalctl --vacuum-time=1years

 

 

0条评论
0 / 1000
l****n
4文章数
2粉丝数
l****n
4 文章 | 2 粉丝
l****n
4文章数
2粉丝数
l****n
4 文章 | 2 粉丝
原创

systemd介绍

2023-03-29 11:06:48
23
0

systemd提供了一个系统和服务管理器,运行为PID 1并负责启动其他程序。systemd使用socket和D-Bus来开启服务们提供基于守护进程的按需启动策略,保留了Linux CGroups的进程追踪功能,支持快照和系统状态恢复,维护挂载和自挂载点,实现了各服务器间丛属于关系的一个更为精细的逻辑控制,。systemd无需经过任何修改便可以替代system V init。其功能包括:

  • 支持并行化任务
  • 同时采用socket式与D-Bus总线式激活服务
  • 按需启动守护进程
  • 利用Linux的Cgroups监视进程
  • 支持快照和系统恢复
  • 维护挂载点和自动挂载点
  • 各服务间基于依赖关系及逆行精密控制

Systemd的服务管理:

  • 单元类型

unit是systemd管理服务的基本单元,可以认为每个服务就是一个unit,并使用一个unit文件定义。在unit文件中需要包含相应服务的描述、属性以及需要运行服务的命令。systemd主要有如下单元类型:

  • 系统服务(.service)
  • 挂在点(.mount)
  • 自动挂载点(.mutomount)
  • 套接字(.socket)
  • 系统设备(.device)
  • 交换分区(.swap)
  • 文件路径(.path)
  • 启动目标(.target)
  • 计时器(.timer)
  • 不是由systend启动的外部进程(.scope)
  • 进程组(.slice)
  • Systemd快照(.snapshot)
  • Target

target是systemd中用于指定服务组的启动方式,相当于SysV-init中的运行级别。每次系统启动时都会运行与当前系统具有同级别 Target 关联的所有服务,如果服务不需要跟随系统自动启动,则完全可以忽略这个 Target 的内容。通常来说,大多数 Linux 用户平时使用的都是 多用户模式 这个级别,对应的 Target 值为 multi-user.target,它又一个等效的可用值是 default.target。

# 查看当前系统的所有 Target

$ systemctl list-unit-files --type=target

 

# 查看一个 Target 包含的所有 Unit

$ systemctl list-dependencies multi-user.target

 

# 查看启动时的默认 Target

$ systemctl get-default

 

# 设置启动时的默认 Target

$ sudo systemctl set-default multi-user.target

 

# 切换 Target 时,默认不关闭前一个 Target 启动的进程,

# systemctl isolate 命令改变这种行为,

# 关闭前一个 Target 里面所有不属于后一个 Target 的进程

$ sudo systemctl isolate multi-user.target

  • 日志管理

Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用 journalctl 一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是 /etc/systemd/journald.conf。

# 查看所有日志(默认情况下 ,只保存本次启动的日志)

$ sudo journalctl

 

# 查看内核日志(不显示应用日志)

$ sudo journalctl -k

 

# 查看系统本次启动的日志

$ sudo journalctl -b

$ sudo journalctl -b -0

 

# 查看上一次启动的日志(需更改设置)

$ sudo journalctl -b -1

 

# 查看指定时间的日志

$ sudo journalctl --since="2012-10-30 18:17:16"

$ sudo journalctl --since "20 min ago"

$ sudo journalctl --since yesterday

$ sudo journalctl --since "2015-01-10" --until "2015-01-11 03:00"

$ sudo journalctl --since 09:00 --until "1 hour ago"

 

# 显示尾部的最新10行日志

$ sudo journalctl -n

 

# 显示尾部指定行数的日志

$ sudo journalctl -n 20

 

# 实时滚动显示最新日志

$ sudo journalctl -f

 

# 查看指定服务的日志

$ sudo journalctl /usr/lib/systemd/systemd

 

# 查看指定进程的日志

$ sudo journalctl _PID=1

 

# 查看某个路径的脚本的日志

$ sudo journalctl /usr/bin/bash

 

# 查看指定用户的日志

$ sudo journalctl _UID=33 --since today

 

# 查看某个 Unit 的日志

$ sudo journalctl -u nginx.service

$ sudo journalctl -u nginx.service --since today

 

# 实时滚动显示某个 Unit 的最新日志

$ sudo journalctl -u nginx.service -f

 

# 合并显示多个 Unit 的日志

$ journalctl -u nginx.service -u php-fpm.service --since today

 

# 查看指定优先级(及其以上级别)的日志,共有8级

# 0: emerg

# 1: alert

# 2: crit

# 3: err

# 4: warning

# 5: notice

# 6: info

# 7: debug

$ sudo journalctl -p err -b

 

# 日志默认分页输出,--no-pager 改为正常的标准输出

$ sudo journalctl --no-pager

 

# 以 JSON 格式(单行)输出

$ sudo journalctl -b -u nginx.service -o json

 

# 以 JSON 格式(多行)输出,可读性更好

$ sudo journalctl -b -u nginx.serviceqq

 -o json-pretty

 

# 显示日志占据的硬盘空间

$ sudo journalctl --disk-usage

 

# 指定日志文件占据的最大空间

$ sudo journalctl --vacuum-size=1G

 

# 指定日志文件保存多久

$ sudo journalctl --vacuum-time=1years

 

 

文章来自个人专栏
操作系统-systemd介绍
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0