Systemd
Systemd#
系统的第一个进程,进程号为 1。
但当我们想显示详细信息的时候,结果会有些不一样。
其实这两个进程是一样的,因为 init
指向的是 systemd
。
init
是 Unix 最早的初始化进程,由于 systemd
取代了 init
,
为了兼容性,/sbin/init
通常是一个指向 systemd
的软链接。
名称后面加 d
是 Unix 守护进程的命名规范,System D 是一个术语,
表示快速思考和解决问题的能力。systemd
诞生于 2010 年,之前用的是 SysVinit。
SysVinit#
Unix System V 这种初始化方法现在已经不怎么用了,但在一些旧的发行版中还能见到。
runlevel#
runlevel 也是这个 SysVinit 的产物。
5 对应 graphical.target
,N 表示上一次的 runlevel 为 No。
阿里云的 Ubuntu 默认目标为 graphical.target
,
这是为了方便用户使用图形界面(VNC)来管理操作系统,
不需要的话可以把目标换成 multi-user.target
。
/etc/rcX.d#
rc 是 run commands 的缩写,.d
是目录的意思,目的是为了避免命名冲突。
这个目录包含了特定运行级下启动的进程,例如运行级 5 对应 /etc/rc5.d
。
虽然现在使用的是 systemd
,但为了兼容性,这些目录和脚本仍然保留着。
Unit Files#
单元文件是 systemd 的配置文件,用于定义和管理系统服务、设备、挂载点、套接字和其他系统资源。
每个单元文件都描述了 systemd 如何启动、停止和监视相关资源。
基本分类#
类型 | 描述 | 扩展名 |
---|
服务单元 | 系统服务 | .service |
挂载单元 | 文件系统挂载点 | .mount |
设备单元 | 定义设备 | .device |
套接字单元 | 套接字服务 | .socket |
计时器单元 | 定时任务 | .timer |
目标单元 | 系统目标状态 | .target |
所在目录#
/etc/systemd/system/
:系统管理员定义的单元文件。/usr/lib/systemd/system/
:发行版提供的单元文件。/run/systemd/system/
:运行时生成的单元文件。
Nginx 状态#
可以通过 Nginx 的状态查看服务的单元文件路径。
Nginx 单元文件#
Nginx 服务的单元文件有好几个路径,第一个是软链接。
第二第三个是硬链接,他们的 inode 是一样的,并且 /lib
是指向 /usr/lib
的软链接。
下面是单元文件的内容。
常用命令#
systemctl start [unit]
:启动单元。systemctl stop [unit]
:停止单元。systemctl enable [unit]
:启用单元,使其在引导时自动启动。systemctl disable [unit]
:禁用单元。systemctl status [unit]
:查看单元状态。systemctl daemon-reload
:在修改或添加单元文件后重新加载 systemd 配置。
Targets#
从上面可以看到,target 是一种单元文件的类型,和一般单元文件不同,它代表的是系统当前的运行状态,
target 定义了该状态下需要启动哪些进程和服务,所以 target 可以包含多个单元文件。
用下面的命令可以查看当前系统的 target。
multi-user.target#
target 文件通常存储在 /usr/lib/systemd/system/
或 /etc/systemd/system/
目录中。
每个 target 文件都包含关于该 target 的依赖关系和启动顺序的信息。
我们可以看一下 multi-user.target
这个文件内容。
下面两个目录包含了 multi-user.target
状态所需要的内容。
/etc
是用户定义配置,/lib
是系统默认配置。- 用户定义配置:优先级更高,同一服务 systemd 会优先执行。
- 系统默认配置:系统或软件包更新时,会随之更新。
常用命令#
设置默认 target:
切换到指定 target:
查看可用 targets: