首页 > 系统相关 >Linux基础 - 服务管理 systemd

Linux基础 - 服务管理 systemd

时间:2023-02-19 18:33:20浏览次数:56  
标签:systemd 12 服务 cl journalctl server Linux root

 

一、systemd引入

1.1 sysv引导启动

Linux的启动之前采用init进程。启动服务: service httpd start 或 /etc/init.d/httpd start

init 这种方法有两个缺点。

一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。

二是启动脚本复杂。init进程只是执行启动脚本, 不管其他事情。脚本需要自己处理各种情况, 这往往使得脚本变得很长。

Ubuntu 的 Upstart 解决了没有直接依赖的程序之间的并行启动。

 

1.2 Systemd 取代 SysV

Systemd 是 Linux系统新一代的初始化系统(init), 主要的设计目标是克服 sysv init 固有的缺点, 提高系统的启动速度。

CentOS 7 使用 Systemd 替换了SysV, Ubuntu 从 15.04 开始使用 Systemd, 已成为大多数发行版的标准配置。

Systemd 取代了initd,成为系统的第一个进程(PID 等于 1), 作为初始守护进程。其他进程都是它的子进程。

 

1.3 Systemd 介绍

systemd 提供了并行化功能, 使用套接字和 D-Bus 激活来启动服务, 按需启动守护程序,

使用Linux控制组跟踪进程, 维护安装和自动挂载点, 并实现了详细的基于事务依赖关系的服务控制逻辑。

systemd支持SysV和LSB初始化脚本。

Systemd 是一系列工具的集合, 其作用也远远不仅是启动操作系统。

它还接管了后台服务、结束、状态查询, 以及日志归档、设备管理、电源管理、定时任务等许多职责,

并支持通过特定事件(如插入特定 USB 设备)和特定端口数据触发的 On-demand (按需)任务。

 

1.4 Systemd 特点

它的设计目标是 为系统的启动和管理提供一套完整的解决方案。

  • 按需启动进程,减少系统资源消耗
  • 并行启动进程,提高系统启动速度
    • Systemd 通过 Socket 缓存、DBus 缓存和建立临时挂载点等方法解决了启动进程之间的依赖, 做到了所有系统服务并发启动。
    • 对于用户自定义的服务,Systemd 允许配置其启动依赖项目,从而确保服务按必要的顺序运行。
  • 使用 CGroup 监视和管理进程的生命周期
    • CGroup 提供了类似文件系统的接口。 当进程创建子进程时,子进程会继承父进程的CGroup。因此无论服务如何启动新的子进程,所有的这些相关进程都会属于同一个CGroup。
    • 在Systemd之前的主流应用管理服务都是使用 进程树 来跟踪应用的继承关系的, 而进程的父子关系很容易通过 两次 fork 的方法脱离。
    • 而Systemd则提供通过 CGroup 跟踪进程关系,引补了这个缺漏。
    • 通过CGroup不仅能够实现服务之间访问隔离,限制特定应用程序对系统资源的访问配额,还能更精确地管理服务的生命周期。
  • 统一管理服务日志
  • 支持快照和系统恢复

 

1.5 优缺点

Systemd的优点是功能强大, 使用方便, 缺点是体系庞大, 非常复杂。

现在还有很多人反对使用Systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反"keep simple, keep stupid"的 Unix 哲学。

 

1.6 版本

[root@cl-server ~]# systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN

 

二、systemd框架图

 

三、系统管理

[root@cl-server ~]# systemd-
systemd-analyze                 systemd-escape                  systemd-path
systemd-ask-password            systemd-firstboot               systemd-run
systemd-cat                     systemd-hwdb                    systemd-stdio-bridge
systemd-cgls                    systemd-inhibit                 systemd-sysv-convert
systemd-cgtop                   systemd-loginctl                systemd-tmpfiles
systemd-coredumpctl             systemd-machine-id-setup        systemd-tty-ask-password-agent
systemd-delta                   systemd-notify                  
systemd-detect-virt             systemd-nspawn 

  

systemd-analyze:          显示此次系统启动时运行每个服务所消耗的时间,可以用于分析系统启动过程中的性能瓶颈
systemd-ask-password:     辅助性工具,用星号屏蔽用户的任意输入,然后返回实际输入的内容
systemd-cat:              用于将其他命令的输出重定向到系统日志
systemd-cgls:             递归地显示指定 CGroup 的继承链
systemd-cgtop:            显示系统当前最耗资源的 CGroup 单元
systemd-escape:           辅助性工具,用于去除指定字符串中不能作为 Unit 文件名的字符
systemd-hwdb:             Systemd 的内部工具,用于更新硬件数据库
systemd-delta:            对比当前系统配置与默认系统配置的差异
systemd-detect-virt:      显示主机的虚拟化类型
systemd-inhibit:          用于强制延迟或禁止系统的关闭、睡眠和待机事件
systemd-machine-id-setup: Systemd 的内部工具,用于给 Systemd 容器生成 ID
systemd-notify:           Systemd 的内部工具,用于通知服务的状态变化
systemd-nspawn:           用于创建 Systemd 容器
systemd-path:             Systemd 的内部工具,用于显示系统上下文中的各种路径配置
systemd-run:              用于将任意指定的命令包装成一个临时的后台服务运行
systemd-stdio- bridge:    Systemd 的内部 工具,用于将程序的标准输入输出重定向到系统总线
systemd-tmpfiles:         Systemd 的内部工具,用于创建和管理临时文件目录
systemd-tty-ask-password-agent:  用于响应后台服务进程发出的输入密码请求

  

systemctl:                用于检查和控制各种系统服务和资源的状态
bootctl:                  用于查看和管理系统启动分区
hostnamectl:              用于查看和修改系统的主机名和主机信息
journalctl:               用于查看系统日志和各类应用服务日志
localectl:                用于查看和管理系统的地区信息
loginctl:                 用于管理系统已登录用户和 Session 的信息
machinectl:               用于操作 Systemd 容器
timedatectl:              用于查看和管理系统的时间和时区信息

 

3.1 systemd-analyze

### 查看启动耗时
[root@cl-server ~]# systemd-analyze 
Startup finished in 867ms (kernel) + 1.484s (initrd) + 28.384s (userspace) = 30.735s
### 查看每个服务的启动耗时 [root@cl-server ~]# systemd-analyze blame 25.326s emqx.service 7.215s kdump.service 6.340s docker.service 4.356s tuned.service 1.793s lvm2-pvscan@8:2.service 1.736s containerd.service 1.530s lvm2-monitor.service 1.422s dev-mapper-centos\x2droot.device 1.062s salt-master.service ...... ### 显示瀑布状的启动过程流 [root@cl-server ~]# systemd-analyze critical-chain The time after the unit is active or started is printed after the "@" character. The time the unit takes to start is printed after the "+" character. multi-user.target @28.356s └─emqx.service @3.029s +25.326s └─network.target @3.014s └─network.service @2.621s +392ms └─NetworkManager-wait-online.service @2.419s +198ms └─NetworkManager.service @2.269s +143ms └─dbus.service @2.167s └─basic.target @2.105s └─sockets.target @2.105s └─docker.socket @2.103s +1ms └─sysinit.target @2.103s └─systemd-update-utmp.service @2.091s +10ms └─auditd.service @1.930s +156ms └─systemd-tmpfiles-setup.service @1.906s +19ms └─rhel-import-state.service @1.861s +37ms └─local-fs.target @1.851s └─run-docker-netns-5a2d9138ba8b.mount @10.330s └─local-fs-pre.target @1.782s └─lvm2-monitor.service @251ms +1.530s └─lvm2-lvmetad.service @346ms └─lvm2-lvmetad.socket @244ms └─-.slice ### 显示指定服务的启动流 [root@cl-server ~]# systemd-analyze critical-chain emqx.service

 

3.2 loginctl

### 列出当前session
[root@cl-server ~]# loginctl list-sessions
   SESSION        UID USER             SEAT            
       199          0 root                             
       200          0 root                             

2 sessions listed.

### 列出当前登录的用户
[root@cl-server ~]# loginctl list-users
       UID USER            
         0 root            

1 users listed.

### 列出指定用户的登录信息
[root@cl-server ~]# loginctl show-user root
UID=0
GID=0
Name=root
Timestamp=二 2021-12-14 11:19:18 CST
TimestampMonotonic=359301590
RuntimePath=/run/user/0
Slice=user-0.slice
Display=199
State=active
Sessions=200 199
IdleHint=no
IdleSinceHint=0
IdleSinceHintMonotonic=0
Linger=no

[root@cl-server ~]# loginctl show-user adminx
Failed to get user: No user 1002 known or logged in

 

3.3 localectl 命令 用于查看本地化设置

[root@cl-server ~]# localectl 
   System Locale: LANG=zh_CN.UTF-8
       VC Keymap: cn
      X11 Layout: cn

  

3.4 timedatectl

# 显示所有可用的时区

# timedatectl list-timezones

 

# 设置当前时区

# sudo timedatectl set-timezone America/New_York

# sudo timedatectl set-time YYYY-MM-DD

# sudo timedatectl set-time HH:MM:SS

[root@cl-server ~]# timedatectl 
      Local time: 四 2021-12-16 11:15:12 CST
  Universal time: 四 2021-12-16 03:15:12 UTC
        RTC time: 四 2021-12-16 03:15:12
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

 

 3.5 journalctl 日志管理

Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。

日志的配置文件是 /etc/systemd/journald.conf。

### 查看所有日志(默认情况下 ,只保存自本次启动以后的日志)
[root@cl-server ~]# journalctl
### 查看内核日志(不显示应用日志)
[root@cl-server ~]# journalctl -k
### 查看系统本次启动的日志
[root@cl-server ~]# journalctl -b
[root@cl-server ~]# journalctl -b -0
### 查看上一次启动的日志(需更改设置)
[root@cl-server ~]# journalctl -b -1
Specifying boot ID has no effect, no persistent journal was found

### 查看指定时间的日志
[root@cl-server ~]# journalctl --since="2021-12-14 10:00:00"
[root@cl-server ~]# journalctl --since="20 min ago"
[root@cl-server ~]# journalctl --since="yesterday" 
[root@cl-server ~]# journalctl --since="2021-12-16 10:20:00" --until "2021-12-16 10:30:00"
[root@cl-server ~]# journalctl --since="2021-12-16 10:20:00" --until "5 min ago"

### 显示尾部的最新日志,默认为10行
[root@cl-server ~]# journalctl -n
-- Logs begin at 三 2021-12-15 12:22:51 CST, end at 四 2021-12-16 10:35:01 CST. --
12月 16 10:33:01 cl-server run-parts(/etc/cron.daily)[7179]: finished logrotate

[root@cl-server ~]# journalctl -n 13
-- Logs begin at 三 2021-12-15 12:22:51 CST, end at 四 2021-12-16 10:35:01 CST. --
12月 16 10:33:01 cl-server CROND[7163]: (root) CMD (cd /application/open-falcon/mymon && ./mymon -c myMon.cfg)
12月 16 10:33:01 cl-server anacron[4965]: Job `cron.daily' started

### 实时滚动显示最新日志
[root@cl-server ~]# journalctl -f

### 查看指定服务的日志
[root@cl-server ~]# journalctl /usr/lib/systemd/systemd-logind 
-- Logs begin at 三 2021-12-15 12:22:51 CST, end at 四 2021-12-16 10:37:01 CST. --
12月 15 12:22:58 cl-server systemd-logind[675]: New seat seat0.
12月 15 12:22:58 cl-server systemd-logind[675]: Watching system buttons on /dev/input/event0 (Power Button)
12月 16 10:02:40 cl-server systemd-logind[675]: New session 26 of user root.
12月 16 10:36:25 cl-server systemd-logind[675]: New session 64 of user root.

### 查看指定进程的日志
[root@cl-server ~]# journalctl _PID=5052
-- Logs begin at 三 2021-12-15 12:22:51 CST, end at 四 2021-12-16 10:38:01 CST. --
12月 16 10:02:40 cl-server sshd[5052]: pam_tally2(sshd:account): option deny=3 allowed in auth phase only
12月 16 10:02:40 cl-server sshd[5052]: Accepted password for root from 192.168.234.1 port 8412 ssh2
12月 16 10:02:40 cl-server sshd[5052]: pam_unix(sshd:session): session opened for user root by (uid=0)

### 查看某个路径的脚本的日志
[root@cl-server ~]# journalctl /usr/bin/bash

### 查看指定用户的日志
[root@cl-server ~]# journalctl _UID=993
-- Logs begin at 三 2021-12-15 12:22:51 CST, end at 四 2021-12-16 10:40:01 CST. --
12月 16 09:42:43 cl-server emqx[2368]: /usr/lib/emqx/erts-11.1.8/bin/erlexec -boot /usr/lib/emqx/releases/4.3.10/st
12月 16 09:42:48 cl-server sh[964]: EMQ X Broker 4.3.10 is started successfully!

### 查看某个 Unit 的日志
[root@cl-server ~]# journalctl -u mysqld.service
[root@cl-server ~]# journalctl -u mysqld.service --since="today"
[root@cl-server ~]# journalctl -u mysqld.service -f
[root@cl-server ~]# journalctl -u mysqld.service -u nginx.service

# 查看指定优先级(及其以上级别)的日志,共有8级
# 0: emerg
# 1: alert
# 2: crit
# 3: err
# 4: warning
# 5: notice
# 6: info
# 7: debug
[root@cl-server ~]# journalctl -p err -b

### 日志默认为分页输出,--no-pager 改为正常的标准输出,一次性输出
[root@cl-server ~]#  journalctl --no-pager

### 以 JSON 格式(单行)输出
[root@cl-server ~]#  journalctl -b -u mysqld.service -o json
### 以 JSON 格式(多行)输出,可读性更好
[root@cl-server ~]#  journalctl -b -u mysqld.service -o json-pretty

### 显示日志占据的硬盘空间
root@cl-server ~]#  journalctl --disk-usage
Archived and active journals take up 8.0M on disk.
### 指定日志文件占据的最大空间
[root@cl-server ~]#  journalctl --vacuum-size=1G
Vacuuming done, freed 0B of archived journals on disk.
### 指定日志文件保存多久
[root@cl-server ~]#  journalctl --vacuum-time=30days
Vacuuming done, freed 0B of archived journals on disk.

 

标签:systemd,12,服务,cl,journalctl,server,Linux,root
From: https://www.cnblogs.com/kingdomer/p/15544756.html

相关文章

  • linux limits.conf 生效,linux修改limits.conf不生效
    正常情况下,/etc/security/limits.conf的改动,应该在下次访问时就生效才对。一、修改方法1.临时方法为了优化linux性能,可能需要修改这个最大值。临时修改的话ulimit-n......
  • Linux/VScode搭建Rust开发环境
    1、Linux下搭建Rust开发环境1.1、使用Rustup安装  执行如下命令curl--proto'=https'--tlsv1.2-sSfhttps://sh.rustup.rs|sh  执行结果如下:  在这里使用......
  • [Qt开发/毕业设计/求职项目]局域网环境下远程文件发送部署系统-服务端、客户端双端的
    写在前面本文旨在做一个简单的代码讲解,我会给出源码,然后整个代码的讲解都在源码的基础上进行。代码可能会随着更新而进行修改,但是整体框架变化不会太大。整个文章内容不......
  • ActiveMQ服务搭建
    ActiveMQ服务搭建启动activeMQ服务器1首先要下载bin压缩文件https://activemq.apache.org/Components->ActiveMQ"Classic"->下载apache-activemq-5.9.0-bin.tar......
  • [kubernetes]集群中部署CoreDNS服务
    前言从k8s1.11版本开始,k8s集群的dns服务由CoreDNS提供。之前已经使用二进制文件部署了一个三master三node的k8s集群,现在需要在集群内部部署DNS服务。环境信息IP......
  • Nginx+Rtmp推流服务器方案
    推流服务器方案一一、前期准备操作系统:Centos7Linux系统Nginx版本:nginx-1.22.0.tar.gzRTMP模块:nginx-rtmp-module推流工具:OBS-Studio拉流工具二、环境搭建1.安......
  • Linux系统之时间管理
    (Linux系统之时间管理)一、date命令介绍1.date帮助[root@tianyi~]#dateMonSep620:56:57CST2021[root@tianyi~]#date--helpUsage:date[OPTION]...[+FORM......
  • LVS(Linux Virtual Server)+Nginx 高可用集群
    LVS(Linux虚拟服务器)LVS(LinuxVirtualServer)是一个开源的负载均衡项目,是国内最早出现的开源项目之一,目前已被集成到Linux内核模块中。该项目在Linux内核中实现了基于......
  • Mina Tcp服务器开发
    因项目架构需求,需要开发一个MinaTcp服务器。我的Mina服务器是JavawinForm,这与在web项目使用会有少许不同。1、Maven依赖<dependency><groupId>o......
  • 68、Linux DNS实现
    DNS软件LINUXDNS软件bindbind:服务器bind-lib:相关库bind-utils:客户端bind-chroot:安全包,将DNS相关文件放置/var/named/chroot配置文件BIND主程序:/usr/sbin/named服务脚本......