systemctl命令和配置整理
systemctl与service的区别
Linux 服务管理的两种方式 service 和 systemctl,systemctl 基本上是的更强大的版本 service。
service
service 命令其实是去/etc/init.d 目录下,去执行相关程序,init.d 目录包含许多系统各种服务的启动和停止脚本。当 Linux 启动时,会寻找这些目录中的服务脚本,并根据脚本的 run level 确定不同的启动级别。
systemctl
systemctl 命令主要负责控制 systemd 系统和服务管理器。在 ubuntu、centos 等一系列发行版中可用。可以方便的管理需要启动的服务等。可以实现开机自启动、出错重启和定时重启等等功能。
systemctl命令
systemctl start name.service
systemctl stop name.service
systemctl restart name.service
systemctl status name.service
systemctl mask name.service
systemctl unmask name.service
systemctl is-active name.service
systemctl list-units --type service
systemctl list-units --type service --all
systemctl enable name.service
systemctl disable name.service
systemctl list-unit-files --type service
ls /etc/systemd/system/*.wants/name.service
systemctl is-enabled name.service
systemctl --failed --type=service
systemctl enable --now postfix
systemctl disable --now postfix
systemctl list-dependencies name.service
systemctl kill unitname
systemctl daemon-reload
systemctl halt
systemctl poweroff
systemctl reboot
systemctl suspend
systemctl hibernate
systemctl hybrid-sleep
服务单元文件目录
/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 | 安装本服务的时候还要安装别的相关服务 |
参考示例
[Unit]
Description=A Demo Tomcat Service
After=network.target mysql.service
Requires=mysql.service
[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/java"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
服务状态
运行状态
- active(running):正有一只或多只程序正在系统中执行的意思;
- active(exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行;
- active(waiting):正在执行当中,不过还需要等待其他的事件才能继续处理;
- inactive:这个服务目前没有运行;
- dead:程序已经清除;
启动状态
- enabled:将在开机时被执行;
- disabled:在开机时不会被执行;
- static:不可以自己启动(enable不可),不过可能会被其他的enabled 的服务来唤醒(关联属性的服务);
- mask:无论如何都无法被启动,因为已经被强制注销(非删除),可通过 systemctlunmask 方式改回原本状态;
|