systemctl命令和配置整理
systemctl命令和配置整理
[TOC]
systemctl与service的区别
Linux 服务管理的两种方式 service 和 systemctl,systemctl 基本上是的更强大的版本 service。
service
service 命令其实是去/etc/init.d
目录下,去执行相关程序,init.d 目录包含许多系统各种服务的启动和停止脚本。当 Linux 启动时,会寻找这些目录中的服务脚本,并根据脚本的 run level 确定不同的启动级别。
systemctl
systemctl 命令主要负责控制 systemd 系统和服务管理器。在 ubuntu、centos 等一系列发行版中可用。可以方便的管理需要启动的服务等。可以实现开机自启动、出错重启和定时重启等等功能。
systemctl命令
1 | # 启动 |
服务单元文件目录
/usr/lib/systemd/system/
:每个服务最主要的启动脚本的配置放在这,有点类似以前的/etc/init.d
;/run/systemd/system/
:系统执行过程中所产生的服务脚本所在目录,这些脚本的优先级要比/usr/lib/systemd/system/
高;/etc/systemd/system/
:管理员根据主机系统的需求所创建的执行脚本所在目录,执行优先级比/run/systemd/system/
高
服务单元文件类型
.service(一般服务类型):主要是系统服务,包括服务器本身所需要的本机服务以及网络服务,比较经常被使用到的服务大多是这种类型,是最常见的类型;
.socket(内部程序数据交换的插槽服务):使用 socket 类型的服务一般是比较不会被用到的服务,因此在开机时通常会稍微延迟启动的时间。一般用于本机服务比较多,例如我们的图形界面很多的软件都是通过 socket 来进行本机程序数据交换的行为;
.target(执行环境类型):其实是一群unit的集合,例如 multi-user.target 其实就是一堆服务的集合;
.mount(文件系统挂载相关的服务):例如来自网络的自动挂载、NFS文件系统挂载等与文件系统相关性较高的程序管理;
.path(监测特定文件或目录类型):某些服务需要监测某些特定的目录来提供序列服务,例如最常见的打印服务,就是通过监测打印序列目录来启动打印功能,这时就得要 .path 的服务类型支持;
.timer(循环执行的服务):这个东西有点类似 anacrontab,不过是由systemd主动提供的,比 anacrontab 更加有弹性。
服务单元文件格式
- [Unit]:定义与Unit类型有关的通用选项,用于提供 Unit 的描述信息、Unit 行为及依赖关系等;
- [Service],[Socket],[Timer],[Mount],[Path]等等:不同单元文件类型就得要使用相对应的设置项目,这个项目主要规范服务启动的脚本、环境配置文件文件名、重新启动的方式等等;
- **[Install]**:定义由
systemctl enable
以及systemctl disable
命令在实现服务启用或禁用时用到的一些选项; - 以
#
开头的行后面的内容会被认为是注释; - 相关布尔值,
1
、yes
、on
、true
都是开启,0
、no
、off
、false
都是关闭; - 时间单位默认是秒,所以要用毫秒(ms)分钟(m)等须显式说明;
- 连词号
-
,表示抑制错误,即发生错误的时候不影响其他命令的执行。
Unit选项
可选项 | 描述 |
---|---|
Description | 对当前服务的简单描述 |
Documentation | 当前服务的文档地址 |
After | 可以指定在哪些服务之后进行启动,仅是说明服务启动的顺序而已 |
Before | 可以指定在哪些服务之前进行启动,仅是说明服务启动的顺序而已 |
Requires | 可以指定服务强依赖于哪些服务(一旦所依赖的服务异常,当前的服务也随之停止) |
Wants | 可以指定服务弱依赖于哪些服务(即使所依赖的服务的启动情况不影响当前的服务是否启动) |
Conflicts | 项目后面接的服务如果有启动,这个 Unit 本身就不能启动,若 Unit 有启动,则此项目后的服务就不启动 |
Service选项
可选项 | 描述 |
---|---|
Environment | 指定环境变量配置 |
EnvironmentFile | 指定环境变量配置文件 |
ExecStart | 指定服务启动时执行的命令或脚本 |
ExecStartPre | 指定服务启动前执行的命令或脚本 |
ExecStartPost | 指定服务启动后执行的命令或脚本 |
ExecStop | 指明停止服务要运行的命令或脚本 |
ExecStopPost | 指定服务停止之后执行的命令或脚本 |
RestartSec | 指定服务在重启时等待的时间,单位为秒 |
ExecReload | 指明重启服务要运行的命令或脚本 |
Restart | 当设定 Restart=1 时,则当次 daemon 服务意外终止后,会再次自动启动此服务,具体看下列类型 |
PrivateTmp | 设定为 yes 时,会在生成 /tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/ 目录 |
KillMode | 指定停止的方式,具体见下面 |
Restart | 指定重启时的类型,具体见下面 |
Type | 指定启动类型,具体见下面 |
Type的可选值
可选值 | 描述 |
---|---|
simple | 指定ExecStart字段的进程为主进程 |
forking | 指定以fork() 子进程执行ExecStart字段的进程 |
oneshot | 执行一次 |
notify | 启动后发送会发送通知信号通知systemd |
idle | 等其他任务结束后才运行 |
Restart的可选值
可选值 | 描述 |
---|---|
no | 退出后不会重启 |
on-success | 当进程正常退出时(退出码为0) 执行重启 |
on-failure | 当进程不正常退出时(退出码不为0) 执行重启 |
on-abnormal | 当被信号终止和超时执行重启 |
on-abort | 当收到没有捕捉到的信号终止时执行重启 |
on-watchdog | 当看门狗超时时执行重启 |
always | 一直重启 |
KillMode可选值
可选值 | 描述 |
---|---|
control-group | 杀掉当前进程中所有的进程 |
process | 杀掉当前进程的主进程 |
mixed | 主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号 |
none | 不杀掉任何进程 |
Install选项
可选项 | 描述 |
---|---|
Alias | 别名,可使用systemctl command Alias.service |
RequiredBy | 被哪些units所依赖,强依赖 |
WantedBy | 被哪些units所依赖,弱依赖 |
Also | 安装本服务的时候还要安装别的相关服务 |
参考示例
1 | [Unit] |
服务状态
运行状态
- active(running):正有一只或多只程序正在系统中执行的意思;
- active(exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行;
- active(waiting):正在执行当中,不过还需要等待其他的事件才能继续处理;
- inactive:这个服务目前没有运行;
- dead:程序已经清除;
启动状态
- enabled:将在开机时被执行;
- disabled:在开机时不会被执行;
- static:不可以自己启动(enable不可),不过可能会被其他的enabled 的服务来唤醒(关联属性的服务);
- mask:无论如何都无法被启动,因为已经被强制注销(非删除),可通过 systemctlunmask 方式改回原本状态;