systemd 入门 02

Systemd是 Linux 操作系统的系统和服务管理器。它旨在向后兼容 SysV 初始化脚本,并提供许多功能,例如在启动时并行启动系统服务、按需激活守护程序或基于依赖关系的服务控制逻辑。

单元文件

systemd 引进了 systemd 单元的概念。这些单元由各种单元配置文件来表示, 并封装系统服务、侦听套接字和其他与 init 系统相关的对象信息。

单元文件通常由三个章节组成

  • [Unit] - 包含不依赖于该单元类型的通用选项。这些选项提供单元描述,指定单元的行为,并将依赖项设置为其他单元。

  • [单元类型] 指明单元的类型 比如服务单元 [Service] 定时器单元 [Timer]

  • [install] - 包含 systemctl enabledisable 命令使用的单元安装信息

重要 [Unit] 章节选项

选项 描述
Description 对这个单元的描述, 会显示在systemctl status的输出中
Documentation 提供单元参考文档的URI列表
After 定义启动单位的顺序。只有在 After 指定的单位处于活动状态后,该单位才会启动。与 Requires 不同,After 不会显式激活指定的单位。Before 选项与 After 选项具有相反的功能
Requires 配置对其他单元的依赖关系。Requires中列出的单元将先被激活。如果任何所需的单元无法启动,则该单元不会被激活
Wants 配置比 Requires 更弱的依赖项。即使列出的单元激活不成功,也不会影响本单元的激活。这是建立自定义设备依赖关系的推荐方式
Conflicts 配置负依赖关系,与Requires相反, 如果Requires中列出的单元有一项被激活了, 该单元就不要激活了

在大多数情况下,仅使用AfterBefore设置顺序和依赖关系就足够了。如果您还使用Wants(推荐)或Requires设置依赖关系,则仍然需要对依赖项进行排序。这是因为排序和依赖关系相互独立地工作

systemd 单元类型的完整列表如下:

单位类型 文件扩展 描述
服务单元 .service 系统服务
目标单元 .target 一组 systemd 单元
Automount 单元 .automount 文件系统自动挂载点
设备单元 .device 内核可识别的设备文件
挂载单位 .mount 文件系统挂载点
路径单元 .path 文件系统中的一个文件或者目录
Scope 单元 .scope 外部创建的进程
Slice 单元 .slice 一组管理系统进程的分层组织单元
快照单元 .snapshot systemd 管理器的保存状态
套接字单元 .socket 进程间的通信套接字
Swap 单元 .swap 一个交换设备或者一个交换文件
计时器单元 .timer systemd 计时器

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/chap-managing_services_with_systemd#sect-Managing_Services_with_systemd-Services-Start_confl

重要的 [Service] 部分选项

选项 描述
Type 影响 ExecStart 功能和相关选项的单元进程启动类型。以下选项之一:
* simple (默认) -- ExecStart 启动的进程是服务的主进程
* forking -- 从 ExecStart 开始的进程会产生一个子进程,该子进程将成为服务的主进程。启动完成后,父进程退出
* oneshot -- 类似于simple,但进程在启动后续单元之前退出
* dbus -- 类似于simple,但后续单元仅在主进程获得D-Bus名称后启动
* notify -- 类似于simple,但后续单元仅在通过 sd_notify() 函数发送通知消息后启动
* idle -- 类似于simple,服务二进制文件的实际执行被延迟到所有作业完成,这避免了将 status 输出与服务的 shell 输出混淆
ExecStart 指定单元启动时要执行的命令或脚本。ExecStartPreExecStartPost 指定在 ExecStart 之前和之后执行的自定义命令。Type=oneshot 时允许指定多个自定义命令,然后依次执行这些命令。
ExecStop 指定在设备停止时要执行的命令或脚本。
ExecReload 指定重新加载单元时要执行的命令或脚本。
Restart systemctl启用此选项后,服务将在其进程退出后重新启动,但命令 完全停止除外。
RemainAfterExit 如果设置为 True,即使所有进程都退出,该服务也被认为是活动的。默认值为假。Type=oneshot如果已配置, 此选项特别有用。

systemd 单元文件位置

目录 描述
/usr/lib/systemd/system/ 安装的软件包中的 systemd 单元文件。
/run/systemd/system/ 在运行时创建的 systemd 单元文件。该目录优先于安装了的服务单元文件的目录。
/etc/systemd/system/ Systemd 单元文件由 systemctl enable 创建,并添加用于扩展服务的单元文件。这个目录优先于带有运行时单元文件的目录。

使用 system.conf 覆盖默认 systemd 配置

默认 systemd 配置是在编译过程中定义的,它可在 systemd 配置文件中找到,地址为 /etc/systemd/system.conf。如果您想与那些默认值分离,并全局覆盖所选的 systemd 单元默认值,请使用这个文件。

例如:要覆盖超时限制的默认值(设置为 90 秒),请使用 DefaultTimeoutStartSec 参数输入所需的值,以秒为单位。

DefaultTimeoutStartSec=required value

管理系统服务

服务单元以 .service 文件扩展名结尾,其用途与初始化脚本类似。要查看、启动、停止、重启、启用或禁用系统服务使用systemctl

service systemctl 描述
service name start systemctl start name.service 启动一个服务
service name stop systemctl stop name.service 停止服务
service name restart systemctl restart name.service 重启服务
service name condrestart systemctl try-restart name.service 仅在运行时重启服务
service name reload systemctl reload name.service 重新加载配置。
service name status systemctl status name.service systemctl is-active name.service 检查服务是否在运行
service --status-all systemctl list-units --type service --all 显示所有服务的状态
chkconfig systemctl 描述
chkconfig name on systemctl enable name.service 启用服务
chkconfig name off systemctl disable name.service 禁用服务
chkconfig --list name systemctl status name.service systemctl is-enabled name.service 检查是否启用了服务
chkconfig --list systemctl list-unit-files --type service 列出所有服务并检查是否启用它们
chkconfig --list systemctl list-dependencies --after 列出在指定单元前排序启动的服务
chkconfig --list systemctl list-dependencies --before 列出在指定单元之后排序启动的服务

对于服务单元而言, 后缀 .service 可以省略 即 systemctl stop nfs-server 等价于 systemctl stop nfs-server.service

另外,有些单元有别名。我们可以使用别名而不是实际的单元名称。可显示可用于特定单元的所有别名, 比如

systemctl show sshd -p Names

systemctl 在 chroot 环境中的行为

在 chroot 环境中大多数 systemctl 命令会拒绝执行任何操作。这样做的原因是, systemd 进程以及使用 chroot 命令的用户在文件系统中并没有同样的视图。

一个例外是单元文件命令,如 systemctl enablesystemctl disable 命令。这些命令不需要正在运行的系统,且不会影响正在运行的进程,但它们确实会影响单元文件。

列出服务

列出所有目前载入的服务单元

systemctl list-units --type service

对于每个服务单元文件,这个命令显示其全名(UNIT),后面有是否载入了单元文件(LOAD)、其高级别(ACTIVE)和低级别(SUB)单元文件激活状态,以及简短描述(DESCRIPTION)。

默认情况下, systemctl list-units 命令只显示活跃的单元。如果您想列出所有载入的单元,无论它们的状态如何,请使用 --all-a 命令行选项运行这个命令

您还可以列出所有可用服务单元以查看是否启用了它们。要做到这一点,请键入

systemctl list-unit-files --type service
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348