14.1 守护进程与服务
14.1.1 服务
服务,Service,是一种 进程,它通过进程间通信机制来 响应其它程序的请求,这些请求 通常来自于网络。服务通常是由服务软件提供的。
服务包括守护进程及其他服务。非守护进程的服务通常由 xinetd 控制,xinetd 负责监听请求,必要时会启动相关的服务来处理,请求被处理完成以后,服务会再次被关闭。
【 xinetd 】 extended internet deamon。负责管理基于互联网的活动。相对于较早的
inetd,其安全性更好。xinetd监听 其管理的所有服务的 端口,当发生连接请求时,xinetd决定是否允许客户端访问。如果允许,则启动对应的服务。
14.1.2 守护进程
守护进程,Daemon,是一种 服务进程,它们运行于后台,管理系统或为其它进程提供特定的功能。它 不会与用户发生任何交互。
早期的守护进程由 SysVinit 部署,而现代的守护进程遵循一个简单而更强大的方案,由 systemd 部署,称之为新型守护进程。
守护进程进程名字均以字母 ‘d’ 结尾,如 syslogd、sshd 等。
典型的守护进程:MySQL,Apache。典型的非守护进程:rsync,vsftpd。
📕 服务的概念大于守护进程。
14.1.3 sysvinit
在 systemd 之前,一直以来都是 SysVinit 掌管启动进程。当系统使用 SysVint 时,init 是加载内核后,第一个执行的进程。 init 会加载一系列的脚本,这些脚本会启动各种系统服务。
SysVinit 的问题在于它 需要细致的调整。必须确保进程的启动顺序正确,以满足进程间的依赖性。
SysVinit 实现的方式是 为服务设定严格的启动顺序,每个服务都被分配了 优先级 数字,然后 init 按照优先级的顺序 依次启动 服务。导致 启动时间较长。
要想确保服务的启动顺序正确,必须为服务手工配置优先级,为此需花费很大的精力。
init 的特点
init 的缺点:
- 启动时间长:init 进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
- 启动脚本复杂:init 进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。
操作命令
所有的服务启动脚本都放在 /etc/init.d/
启动命令:/etc/init.d/apache2 start 或 service apache2 start
停止命令:/etc/init.d/apache2 stop 或 service apache2 stop
重新启动:/etc/init.d/apache2 restart 或 service apache2 restart
查看状态:/etc/init.d/apache2 status 或 service apache2 status
服务启动模式
-
独立启动:stand alone,服务独立启动,常驻于内存,反应速度快。
-
超级守护进程:super daemon,做为总管进程,统一管理所有的守护进程。早期的超级守护进程是
inetd,后来被xinetd取代了。xinetd管理多个网络服务。当没有用户请求套接字或端口时,服务不会启动。有用户请求时,xinetd唤醒对应的服务。请求结束,服务也会停止。优点是可以 管理多个网络服务,缺点是 唤醒服务会有一点延迟。
-
服务的依赖关系:
init 需要管理员根据服务之间的依赖关系,手动排序 优先级。相当费精力。
-
执行等级的分类: init 可以根据使用者自定义的 执行等级 来唤醒不同的服务,以进入不同的 服务环境 和 操作界面。
Linux 提供 7 个执行等级,0 ~ 6, 其中比较重要的是 1,单人维护模式,3,纯文本模式,5,文字加图形界面
各个执行等级的启动脚本是通过
/etc/rc.d/rc[0-6]/SXXdaemon链接到/etc/init.d/daemon链接文件名:SXXdaemon。S 表示启动该服务,XX 是优先级。
-
设置执行等级对应的服务:SXXdaemon 这些链接文件不是手动生成的,而是通过以下命令自动生成的:
-
开机启动:
chkconfig daemon on -
开机不启动:
chkconfig daemon off -
查看是否开机启动:
chkconfig --list daemon
-
-
执行等级的切换:
init 5会从纯命令行(运行等级 3)切换到图形界面(运行等级 5),init 会自动分析/etc/rc.d/rc[3].d/和/etc/rc.d/rc[5].d/目录中的脚本,然后启动转换执行等级所需的服务。
14.1.4 systemd
systemd 简介
从 CentOS 7 以后,Red Hat 系列发行版放弃沿用多年的 System V 开机启动服务的流程,改用 systemd 这个启动服务管理机制。
在系统启动后,做为第一个运行的进程,systemd 扮演初始化系统的角色,负责启动和维护用户空间的服务。
Systemd 中,所有的服务都是彼此分离的,即使某一个服务的配置文件有问题,也不会影响到其它的服务。
Systemd 不只是一个初始化的系统,它也 是一套库和工具。可以用来 替代多种服务和工具,包括 sysvinit, pm-utils, inetd, acpid, syslog, watchdog, cron, atd 等。
Systemd 可以兼容 init 的启动脚本,因此,init 启动脚本也能够通过 systemd 来管理,但无法使用 systemd 的高级功能。
systemd 独有的功能
- sysvinit 的执行等级,只有 1, 3, 5 有对应的 target 类型
- 所有服务都用 systemctl 管理,支持的语法有限制,不可自定义参数
- 如果没有用 systemctl 启动服务,而是手动启动的,systemd 将无法管理
- systemd 启动过程中,不接受任何输入,因此自定义的服务不应在启动期间尝试用标准输入与之互动,因为期间标准输入被设置为
/dev/null
14.1.5 systemd 与 sysvinit 的区别
| 功能 | systemd | SysVinit |
|---|---|---|
| 服务 | 引入 单元(systemd units)的概念,每个服务为一个单元,这些单元由各自的配置文件控制,这些文件包含了服务启动时需要的所有配置信息,包括进程依赖关系的描述。 | 每个服务对应一个脚本文件 |
| 服务启动顺序 | 并行启动多个服务,提升启动速度。只需设置少量的文件。 | 依照优先级 逐个启动,需要花费大量精力去手动设置。 |
| 服务的管理 | 按需启动服务,无需另外的服务来管理 | 按需启动服务,需要超级守护进程来管理 |
| 服务依赖 | 服务依赖关系 自动管理,会自动启动相关的服务,防止长时间超时。 | 静态管理,需要管理员手动调整各服务启动顺序,需要管理员对各服务关系非常了解 |
| 服务监控 | 持续监控 服务,可以自动重启崩溃的服务 | 需要常常调整监控服务,服务很容易逃避监控 |
| 记录日志 | 增强了记录日志能力,启动后就可以开始记录 | 启动后一段时间才开始记录日志 |
| 服务环境 | 按相关性把所有服务 分组(target),通过切换组来切换服务环境 | 使用 执行等级 来切换不同的服务环境 |
14.2 systemd 简介
systemd 是 一套软件,它为 Linux 提供基本的构建块。其中最突出的一个软件就是 systemd,是一个 系统管理和服务管理的工具。它是一个 初始化 的系统,负责 自举用户空间,并在 启动后管理系统进程。是 UNIX System V 以及 BSD init 的替代品。
systemd 项目的主要目标之一是,在所有的 Linux 发行版中 统一基本配置和服务行为。
2015 年起,大量的发行版开始把 systemd 做为其默认的初始化系统。
Systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。
事实上,现在还有很多人反对使用 systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反 “keep simple, keep stupid” 的 Unix 哲学。
14.2.1 systemd 设计宗旨
systemd 的设计目标是,为系统的启动和管理提供一套完整的解决方案。Systemd 这个名字的含义,就是它要守护整个系统。
使用了 Systemd,就不需要再用init了。Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。
systemd 的立意:
- 系统管理及服务管理:通过应用各种配置,来管理系统和服务
- 软件平台:为其它软件的开发提供服务
- 应用与内核的粘合剂:提供多种接口,便于程序访问各种内核的功能
systemd 不仅仅是初始化的那个守护进程,它更是代表围绕它的整个的软件包,包括 journald、logind、networkd 等许多其它的底层组件。
做为一个内置的软件包,systemd 代替了 那些由传统初始化守护进程控制的 启动序列、运行级以及各个脚本。同时,它也 整合 了许多 Linux 常见的 其它的服务,如用户登陆、系统控制台、设备热插拔、计划任务、日志、主机名及区域设置。
与 init 一样,systemd 也是一个守护进程,用来管理其它的守护进程,包括它自己。它是系统启动过程中第一个守护进程,也是系统关闭过程中最后一个终止的守护进程。systemd 是进程树中的根,Unix 系统中的第一个进程(PID 1)往往扮演着特殊的角色,当某个守护进程从其父进程分离出来以后被终止时,systemd 会收到一个 SIGCHLD 信号。因此,第一个进程非常适合用来监控守护进程。传统的管理守护进程的办法是,把守护进程启动之后就不再监控了,而 systemd 尝试在这方面有所改进。
systemd 是以并行的方式执行启动序列的,比传统的方法要快。对于进程间通信,systemd 使 Unix domain socket 和 D-Bus 对运行中的守护进程变的可用。systemd 自身的状态也可以保存于快照中,便于日后查看。
14.2.2 单元
Systemd 可以管理所有 系统资源。不同的资源统称为 Unit(单元)。
单元一共分成 12 种。
- Service unit:系统服务
- Target unit:多个单元构成的一个组
- Device Unit:硬件设备
- Mount Unit:文件系统的挂载点
- Automount Unit:自动挂载点
- Path Unit:文件或路径
- Scope Unit:不是由 Systemd 启动的外部进程
- Slice Unit:进程组
- Snapshot Unit:Systemd 快照,可以切回某个快照
- Socket Unit:进程间通信的套接字
- Swap Unit:交换文件
- Timer Unit:定时器
systemd 把 每个守护进程的 初始化指令都保存在一个 配置文件 中,称之为 单元文件(Unit File),使用的是声明语言,传统方法是每个守护进程用一个脚本文件来配置。
systemctl list-units 列出正在运行的单元
systemctl list-units --all 列出所有单元,包括没有找到配置文件的或者启动失败的
systemctl list-units --all --state=inactive 列出所有没有运行的单元
systemctl list-units --failed 列出所有加载失败的单元
systemctl list-units --type=service 列出所有正在运行的、类型为服务的单元
单元的状态
systemctl status
命令用于查看系统状态和单个单元的状态。
systemctl status
显示系统状态
sysystemctl status bluetooth.service
显示单个单元的状态
systemctl -H root@rhel7.example.com status httpd.service
显示远程主机的某个单元的状态
除了status命令,systemctl还提供了三个查询状态的简单方法,主要供脚本内部的判断语句使用。
systemctl is-active application.service
显示某个单元是否正在运行
systemctl is-failed application.service
显示某个单元是否处于启动失败状态
systemctl is-enabled application.service
显示某个单元服务是否建立了启动链接
单元管理
对于用户来说,最常用的是下面这些命令,用于启动和停止单元(经常用于管理服务)。
sudo systemctl start apache.service
立即 启动 一个服务
sudo systemctl stop apache.service
立即 停止 一个服务
sudo systemctl restart apache.service
重启 一个服务
sudo systemctl kill apache.service
杀死 一个服务的所有子进程
sudo systemctl reload apache.service
重新加载 一个服务的 配置文件
sudo systemctl daemon-reload
重新加载所有修改过的配置文件
systemctl show httpd.service
显示某个单元的 所有底层参数
systemctl show -p CPUShares httpd.service
显示某个单元的指定属性的值
sudo systemctl set-property httpd.service CPUShares=500
设置某个单元的指定属性
依赖关系
单元之间存在依赖关系:A 依赖于 B,就意味着 Systemd 在启动 A 的时候,同时会去启动 B。
systemctl list-dependencies 命令列出一个单元的所有依赖。
systemctl list-dependencies nginx.service
上面命令的输出结果之中,有些依赖是 Target 类型,默认不会展开显示。如果要展开 Target,就需要使用--all参数。
systemctl list-dependencies --all nginx.service
14.2.3 核心组件
随着被整合进 Linux,systemd 也提供了各种守护进程和工具的替代品,可以替代启动脚本、pm-utils、inetd、acpid、syslog、watchdog、cron、atd 等。systemd 的核心组件包括:
- systemd 是系统管理器及服务管理器
- systemctl 可用于检查和控制 systemd 的状态
- systemd-analyze 用于确定系统启动性能统计信息,并从 systemd 中检索其他状态和跟踪信息
systemd 不再使用 PID,而是使用内核的 cgroups 子系统来追踪进程,因此,守护进程是无法逃脱 systemd 的。system 不仅仅是使用 cgroups,它还用 systemd-nspawn 和 machinectl 这两个工具来 强化 其功能,这两个工具 实现了 Linux 容器的创建和管理。从 205 版本开始,systemd 也提供了 cgroups 接口。
【 cgroups 】Control Groups 的缩写,是 Linux 内核的功能,它会 限制、计算、隔离一组进程的资源使用(CPU,内存,磁盘 I/O,网络等)。
14.2.4 辅助组件
journald
systemd-journald 该守护进程负责把事件保存到日志中,使用只可追加的二进制文件做为日志文件。系统管理员可以选择是使用 systemd-journald 来保存系统事件的日志,还是使用 syslog-ng 或 rsyslog。
logind
systemd-logind 守护进程以多种方式 管理用户登陆和座位(seats),它是一个集成的登陆管理器,增强了多座位(Multi-Seat)的支持,替代了 ConsoleKit(已不再维护)。
【 Multi-Seat 】一个座位,seat,由分配给特定工作空间的所有硬件设备组成,通常至少要包括键盘、鼠标,也可包含摄像头、声卡等。多座位,Multi-Seat,多座系统允许多个独立的座位,这些座位都能独立地、同时被不同的用户使用。
networkd
networkd 守护进程用于控制网络接口的配置。
tmpfiles
systemd-tmpfiles 工具用于临时文件和临时目录的创建和清理,这些临时文件和临时目录经常只在启动时运行一次,之后便是以一定的时间间隔来运行了。
timedated
systemd-timedated 守护进程用于控制与时间相关的设置,如系统时间、系统时区,或在 UTC 与本地时间系统时钟之间做出选择。可以通过 D-Bus 来访问该守护进程。
udevd
udev 是内核的设备管理器,用于控制 /dev 目录,以及在添加删除设备时用户空间的所有行为,包括固件的加载。
libudev
这是使用 udev 的标准库,允许第三方程序查询 udev 的资源。
systemd-boot
systemd-boot 是启动管理器。
14.3 单元的配置文件
14.3.1 概述
每一个单元都有一个配置文件,告诉 Systemd 怎么启动这个单元。配置文件有时也称为 单元文件。
Systemd 默认从目录 /etc/systemd/system/ 读取配置文件。但是,里面存放的大部分文件都是 符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在这里。
systemctl enable 命令用于在上面两个目录之间,建立符号链接 关系。
$ sudo systemctl enable clamd@scan.service
# 等同于
$ sudo ln -s '/usr/lib/systemd/system/clamd@scan.service' '/etc/systemd/system/multi-user.target.wants/clamd@scan.service'
如果配置文件里面设置了开机启动,systemctl enable 命令相当于 激活开机启动。
与之对应的,systemctl disable 命令用于在两个目录之间,撤销符号链接关系,相当于 撤销开机启动。
$ sudo systemctl disable clamd@scan.service
配置文件的 后缀名,就是该 单元的种类,比如 sshd.socket。如果省略,Systemd 默认后缀名为 .service,所以 sshd 会被理解成 sshd.service。
支持 Systemd 的程序在安装的时候,会自动在 /usr/lib/systemd/system 目录添加一个配置文件。
14.3.2 配置文件的状态
列出所有配置文件:
systemctl list-unit-files
列出指定类型的配置文件:
systemctl list-unit-files --type=service
$ systemctl list-unit-files
UNIT FILE STATE
chronyd.service enabled
clamd@.service static
clamd@scan.service disabled
enabled
启用,已建立启动链接,开机自动启动
disabled
禁用,没建立启动链接,开机不会自动启动,但可由其他服务激活,也可以手动运行。
static
静态,其配置文件没有 install 部分,所以无法被启用。但可以被其他单元激活,通常作为其它单元的依赖。
masked
屏蔽,该配置文件被禁止建立启动链接。彻底禁用,任何情况都无法运行。
注意,从配置文件的状态无法看出,该单元是否正在运行。必须用 systemctl status bluetooth.service 命令查看。一旦 修改 了配置文件,就要让 SystemD 重新加载 配置文件,然后 重新启动单元,否则修改不会生效。
$ sudo systemctl daemon-reload
$ sudo systemctl restart httpd.service
14.3.3 配置文件的格式
配置文件就是普通的文本文件,可以用文本编辑器打开。
systemctl cat 命令可以查看配置文件的内容。
$ systemctl cat atd.service
>
[Unit]
Description=ATD daemon
>
[Service]
Type=forking
ExecStart=/usr/bin/atd
>
[Install]
WantedBy=multi-user.target
单元文件的内部结构是由多个区块组成的,每个区块的第一行,是用 方括号表示的区块名,如 [Unit]。
14.3.4 配置文件的区块
为表达方便,下文中用 “我” 来代表当前单元。
修改配置文件以后,需要重新加载配置文件,然后重新启动相关服务。
sudo systemctl daemon-reload 重新加载配置文件
sudo systemctl restart foobar 重启相关服务
通用区块
区块的名称 是系统预定义的,区分大小写。如果需要增加非标准的区块用于自定义功能,可以在区块名称前加 X- 前缀。
每个区块内部是一些 等号连接的键值对。而且键值对的 等号两侧不能有空格。
在发生文件覆盖时,通过给指令分配空值,可以重置该变量。如 Requires=。
systemd 允许在配置文件中使用比较灵活宽松的配置。如对于布尔值,可以用 1、yes、on、true 等代表真。
[Unit] 区块
通常是配置文件的 第一个区块,用来定义 单元的元数据,以及配置 与其他单元的关系。它的主要字段如下。
Description:简短描述Documentation:文档地址Requires:我 必须要 这些单元,它们不运行,我会启动失败Wants:我 想要 这些单元,没有就算了,我不会启动失败BindsTo:我和它 绑定,它退出,我就停止运行Before:我必须在这些单元 之前启动After:我必须在这些单元 之后启动Conflicts:我和它们冲突,不能同时运行Condition...:这些条件必须满足,否则我 优雅地忽略Assert...:这些条件必须满足,否则会 报错
[Install] 区块
通常是配置文件的 最后一个区块,用来 定义如何启动,以及 是否开机启动。它的主要字段如下。下文中的 “我” 指当前单元。
-
WantedBy:这些目标有我更好,没我也行。它的值是一个或多个 目标(target),当前单元激活时(enable)符号链接会放入
/etc/systemd/system目录下面以目标名.wants后缀命名的子目录中。 -
RequiredBy:这些目标有我才能运行它的值是一个或多个 目标,当前单元激活时符号链接会放入
/etc/systemd/system目录下面以目标名.required后缀命名的子目录中。 Alias:我的 别名,可用于诸多systemctl命令中Also:当前单元激活(enable)时,会被同时激活的其他 Unit
特定单元的区块
夹在 [Unit] 和 [Install] 中间的区块,每种单元有着不同的内容,这些区块大多用于设定其特定种类的参数。
其中,device、target、snapshot、scope 这些区块不属于特定种类。
[Service] 区块
用于进行 服务 的配置,只有 Service 类型的单元才有这个区块。它的主要字段如下。
Type:定义 启动时的进程行为。它有以下几种值。Type=simple:默认值,执行ExecStart指定的命令,启动主进程Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行Type=dbus:当前服务通过 D-Bus 启动Type=notify:我启动完毕,会通知Systemd,再继续往下执行Type=idle:其他所有作业执行完毕才会运行
ExecStart:启动我 的命令,设置命令的完整路径及参数,文件中只能指定一次ExecStartPre:启动我之前要执行的命令,可指定多次ExecStartPost:启动我之后要执行的命令,可指定多次ExecReload:重新加载我的配置文件 时要执行的命令ExecStop:暂停我 时要执行的命令,如果不指定,服务被暂停时,服务进程会立即被终止ExecStopPost:暂停我之后要执行的命令RestartSec:如果启用了 间隔自动重启,该参数用于设置 间隔的秒数Restart:定义 何种情况 Systemd 会自动重启我,可用值为always、on-success、on-failure、on-abnormal、on-abort、on-watchdogTimeoutSec:定义 Systemd 停止我之前等待的秒数Environment:指定环境变量
另外,对于某些特殊的服务类型,还有一些附加的指令:
RemainAfterExit=通常用于oneshot类型的服务,即使进程退出了也应该视该服务为激活。PIDFile=服务类别为forking时,被监视的主要子进程 PID 会保存在一个文件中,该命令用于设置该文件的路径。BusName=当使用dbus服务类型时,该参数用于设置 bus name。NotifyAccess=当服务类型为notify时,该参数用于指定该服务使用哪个套接字来监听通知消息,可选值为none、main、all。默认为none,即忽略所有状态消息。main表示监听主进程发出的消息,all表示使用该服务 cgroup 中的所有成员来监听。
14.4 Target
启动计算机的时候,需要启动大量的单元。如果每一次启动,都要一一写明本次启动需要哪些单元,显然非常不方便。Systemd 的解决方案就是 Target。
简单说,Target 就是一个单元组,包含许多相关的单元 。启动某个 Target 的时候,Systemd 就会启动里面所有的单元。
从这个意义上说,Target 这个概念类似于 “状态点”,启动某个 Target 就好比启动到某种状态。
传统的 init 启动模式里面,有运行级的概念,跟 Target 的作用很类似。不同的是,运行级是互斥的,不可能多个运行级同时启动,但是 多个 Target 可以同时启动。
14.4.1 常用命令
systemctl list-unit-files --type=target
查看当前系统的所有 Target
systemctl list-dependencies multi-user.target
查看一个 Target 包含的所有单元
systemctl get-default
查看启动时的默认 Target
sudo systemctl set-default multi-user.target
设置启动时的默认 Target
sudo systemctl isolate multi-user.target
关闭前一个 Target 里面所有不属于后一个 Target 的进程。切换 Target 时,默认不关闭前一个 Target 启动的进程,systemctl isolate 命令会改变这种行为,
14.4.2 Target 与 传统运行级的对应关系
| runlevel | target | 符号链接指向 |
| Runlevel 0 | runlevel0.target | poweroff.target |
| Runlevel 1 | runlevel1.target | rescue.target |
| Runlevel 2 | runlevel2.target | multi-user.target |
| Runlevel 3 | runlevel3.target | multi-user.target |
| Runlevel 4 | runlevel4.target | multi-user.target |
| Runlevel 5 | runlevel5.target | graphical.target |
| Runlevel 6 | runlevel6.target | reboot.target |
14.4.3 Target 与 init 进程的主要差别
- 默认的运行级(在
/etc/inittab文件设置)被默认的 Target 取代,位置是/etc/systemd/system/default.target,通常软链接到graphical.target或multi-user.target。 - 启动脚本的位置,以前是
/etc/init.d目录,软链接到不同的运行级目录 (如/etc/rc3.d、/etc/rc5.d等),现在则存放在/lib/systemd/system和/etc/systemd/system目录。 - 配置文件的位置,以前
init进程的配置文件是/etc/inittab,各种服务的配置文件存放在/etc/sysconfig目录。现在的配置文件主要存放在/lib/systemd目录,在/etc/systemd目录里面的修改可以覆盖原始设置。
14.4.4 Target 的配置文件
注意,Target 配置文件里面 没有启动命令。
14.5 日志管理
Systemd 统一管理所有单元的启动日志。带来的好处就是,可以只用 journalctl 一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是 /etc/systemd/journald.conf。
journalctl 功能强大,用法非常多。
常用命令
查看所有日志(默认情况下 ,只保存本次启动的日志):
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
查看某个单元 的日志:
sudo journalctl -u nginx.service
sudo journalctl -u nginx.service --since today
实时滚动显示某个单元的最新日志:
sudo journalctl -u nginx.service -f
合并显示多个单元的日志:
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
14.5 CentOS 7.x 默认启动的服务简易说明
CentOS 7 默认启动的服务
| 服务名称 | 可关闭 | 服务类别 | 功能简介 |
|---|---|---|---|
| abrtd | 保留 | 系统 | 用于监控应用程序的崩溃。当崩溃发生时,它会收集错误信息,然后根据应用程序的类型及配置文件的参数采取对应的措施。通过插件可以把错误信息通过邮件、FTP 等发给管理员 |
| accounts-daemon | 关闭 | 系统 | 是 AccountsService 的一部分,允许程序获取并修改用户帐户信息。有潜在安全风险 |
| alsa-X | 关闭 | 系统 | 与音效有关 |
| atd | 保留 | 系统 | 一次性计划任务 |
| auditd | 保留 | 系统 | SELinux 依靠它监控授权验证情况,日志为 /var/log/audit/audit.log |
| avahi-daemon | 关闭 | 系统 | 通过部署苹果公司的 Zeroconf 架构,自动的分析与管理网络。常用于移动设备 |
| brandbot rhel-* | 保留 | 系统 | 开机环境检测,网络启动关闭 |
| chronyd ntpd ntpdate | 保留 | 系统 | 通过网络校正时间 |
| cpupower | 保留 | 系统 | 一组为辅助 CPU 调频而设计的用户空间工具 |
| crond | 保留 | 系统 | 计划任务 |
| cups | 关闭 | 管理打印机,包括网络打印 | |
| dbus | 保留 | 系统 | 提供简便进程间通信的消息总线系统。包含一个能以全系统或者针对一个用户会话运行的守护进程,和一系列提供与 D-Bus 通信的库 |
| dm-event multipathd | 保留 | 系统 | 用于监控设备映射 |
| dmraid-activation mdmonitor | 保留 | 系统 | 用来启动软 RAID |
| dracut-shutdown | 保留 | 系统 | 与开机过程有关 |
| ebtables | 保留 | 系统/网络 | 防火墙,如果启用了 firewalld,可以关闭 |
| emergency rescue | 保留 | 系统 | 进入紧急模式或者是救援模式的服务 |
| firewalld | 保留 | 系统/网络 | 新的防火墙服务 |
| gdm | 保留 | 系统 | GNOME显示环境的管理器 |
| getty@ | 保留 | 系统 | 命令行服务 |
| hyper_ksm_libvirt* vmtoolsd | 保留 | 系统 | 虚拟机相关的一系列服务,不用虚拟机可以关闭 |
| irqbalance | 保留 | 系统 | 适用于多核心的硬件,用于自动分配系统中断 |
| iscsi* | 保留 | 系统 | 挂载网络磁盘 |
| kdump | 可关闭 | 系统 | 记录 Linux 核心的出错信息 |
| lvm2-* | 保留 | 系统 | LVM 相关的多个服务 |
| microcode | 保留 | 系统 | Intel 的 CPU 提供的微指令集,如果没有下载 Intel 的指令集文件,可以关闭 |
| ModemManager network NetworkManager* | 保留 | 系统/网络 | Modem、网络设置等服务 |
| quotaon | 保留 | 系统 | Quota 服务 |
| rc-local | 保留 | 系统 | 兼容于 /etc/rc.d/rc.local 的调用方式 |
| rsyslog | 保留 | 系统 | 记录系统产生的各项信息, 包括 /var/log/messages 等日志 |
| smartd | 保留 | 系统 | 自动监测硬盘状态,发生问题自动的反馈信息 |
| sysstat | 保留 | 系统 | 一体化的 Linux 系统性能和使用活动监控工具 |
| systemd-* | 保留 | 系统 | 系统运行过程所需要的服务 |
| plymount* upower | 保留 | 系统 | 图形界面有关的一些服务 |
CentOS 7 默认不会启动的服务
所有服务均为网络服务:
| 服务名称 | 功能 |
|---|---|
| dovecot | 提供 POP3/IMAP 邮件服务 |
| httpd | www server |
| named | DNS Server |
| nfs nfs-server | Network Filesystem Server |
| smb nmb | 模拟 Windows 网络邻居 |
| vsftpd | FTP Server |
| sshd | SSH Server |
| rpcbind | 实现 RPC 协议的重要服务 |
| postfix | 邮件服务器,系统产生的邮件也是通过它发送 |