systemctl介绍
声明:本文转载自:systemd (中文简体)
systemd 是 Linux 下的一款系统和服务管理器,兼容 SysV 和 LSB 的启动脚本。systemd 的特性有:支持并行化任务;同一时候採用 socket 式与 D-Bus 总线式激活服务;按需启动守护进程(daemon)。利用 Linux 的 cgroups 监视进程;支持快照和系统恢复。维护挂载点和自己主动挂载点。各服务间基于依赖关系进行精密控制。
检视和控制systemd的主要命令是systemctl。
该命令可用于查看系统状态和管理系统及服务。详见man 1 systemctl。
小贴士:
- 在 systemctl 參数中加入 -H <username>@<主机名> 能够实现对其它机器的远程控制。该过程使用 SSH连接。
- systemadm 是 systemd 的官方图形前端。官方软件仓库 提供了稳定版本号 systemd-ui。- Plasma 用户能够安装 systemctl 图形前端 systemd-kcm。
安装后能够在 System administration 下找到
基本工具
分析系统状态
显示 系统状态:
$ systemctl status
输出激活的单元:
$ systemctl
下面命令等效:
$ systemctl list-units
输出执行失败的单元:
$ systemctl --failed
全部可用的单元文件存放在 /usr/lib/systemd/system/ 和 /etc/systemd/system/ 文件夹(后者优先级更高)。
查看全部已安装服务:
$ systemctl list-unit-files
使用单元
一个单元配置文件能够描写叙述例如以下内容之中的一个:系统服务(.service)、挂载点(.mount)、sockets(.sockets) 、系统设备(.device)、交换分区(.swap)、文件路径(.path)、启动目标(.target)、由 systemd 管理的计时器(.timer)。
详情參阅 man 5 systemd.unit。
使用 systemctl 控制单元时,通常须要使用单元文件的全名,包括扩展名(比如 sshd.service)。可是有些单元能够在systemctl中使用简写方式。
- 假设无扩展名,systemctl 默认把扩展名当作 .service。
比如 netcfg 和 netcfg.service 是等价的。
- 挂载点会自己主动转化为对应的 .mount 单元。比如 /home 等价于 home.mount。
- 设备会自己主动转化为对应的 .device 单元,所以 /dev/sda2 等价于 dev-sda2.device。
Note: 有一些单元的名称包括一个 @ 标记。 (e.g. name@string.service): 这意味着它是模板单元 name@.service 的一个 实例。 string 被称作实例标识符, 在 systemctl 调用模板单元时,会将其当作一个參数传给模板单元。模板单元会使用这个传入的參数取代模板中的 %I 指示符。
在实例化之前。systemd 会先检查 name@string.suffix 文件是否存在(假设存在,应该就是直接使用这个文件。而不是模板实例化了)。大多数情况下,包换 @ 标记都意味着这个文件是模板。假设一个模板单元没有实例化就调用,该调用会返回失败,由于模板单元中的 %I 指示符没有被替换。
Tip:
下面的大部分命令都能够跟多个单元名, 具体信息參见 man systemctl。
从systemd 220版本号開始, systemctl命令在enable、disable和mask子命令中添加了–now选项,能够实现激活的同一时候启动服务。取消激活的同一时候停止服务。一个软件包可能会提供多个不同的单元。假设你已经安装了软件包,能够通过pacman -Qql package | grep systemd命令检查这个软件包提供了哪些单元。
马上激活单元:
# systemctl start <单元>
马上停止单元:
# systemctl stop <单元>
重新启动单元:
# systemctl restart <单元>
又一次载入配置:
# systemctl reload <单元>
输出单元执行状态:
$ systemctl status <单元>
检查单元是否配置为自己主动启动:
$ systemctl is-enabled <单元>
开机自己主动激活单元:
# systemctl enable <单元>
取消开机自己主动激活单元:
# systemctl disable <单元>
禁用一个单元(禁用后,间接启动也是不可能的):
# systemctl mask <单元>
取消禁用一个单元:
# systemctl unmask <单元>
显示单元的手冊页(必须由单元文件提供):
# systemctl help <单元>
又一次载入 systemd,扫描新的或有变动的单元:
# systemctl daemon-reload
电源管理
安装 polkit 后才干够一般用户身份使用电源管理。
假设你正登录在一个本地的systemd-logind用户会话。且当前没有其它活动的会话。那么下面命令无需root权限就可以执行。否则(比如。当前有还有一个用户登录在某个tty),systemd 将会自己主动请求输入rootpassword。
重新启动:
$ systemctl reboot
退出系统并停止电源:
$ systemctl poweroff
待机:
$ systemctl suspend
休眠:
$ systemctl hibernate
混合休眠模式(同一时候休眠到硬盘并待机):
$ systemctl hybrid-sleep
编写单元文件
systemd 单元文件的语法来源于 XDG桌面入口配置文件.desktop文件。最初的源头则是Microsoft Windows的.ini文件。
单元文件能够从两个地方载入。优先级从低到高各自是:
- /usr/lib/systemd/system/: 软件包安装的单元
- /etc/systemd/system/: 系统管理员安装的单元
- 当systemd执行在用户模式下时,使用的载入路径是全然不同的。
- systemd 单元名仅能包括 ASCII 字符, 下划线和点号. 其它字符须要用 C-style “\x2d” 替换. 參阅 man systemd.unit 和 man systemd-escape.}}
单元文件的语法,能够參考系统已经安装的单元,也能够參考man systemd.service中的EXAMPLES章节。
小贴士:
以 # 开头的凝视可能也能用在 unit-files 中, 可是仅仅能在新行中使用。 不要在 systemd 的參数后面使用行末凝视, 否则 unit 将会启动失败。
处理依赖关系
使用systemd时,可通过正确编写单元配置文件来解决其依赖关系。
典型的情况是,单元A要求单元B在A启动之前执行。在此情况下。向单元A配置文件里的 [Unit] 段加入 Requires=B 和 After=B 就可以。若此依赖关系是可选的,可加入 Wants=B 和 After=B。请注意 Wants= 和 Requires= 并不意味着 After=,即假设 After= 选项没有制定,这两个单元将被并行启动。
依赖关系通常被用在服务(service)而不是目标(target)上。比如, network.target 通常会被某个配置网络接口的服务引入,所以,将自己定义的单元排在该服务之后就可以,由于 network.target 已经启动。
服务类型
编写自己定义的 service 文件时,能够选择几种不同的服务启动方式。启动方式可通过配置文件 [Service] 段中的 Type= 參数进行设置。
- Type=simple(默认值):systemd觉得该服务将马上启动。服务进程不会fork。
假设该服务要启动其它服务,不要使用此类型启动。除非该服务是socket激活型。
- Type=forking:systemd觉得当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求。使用此类型启动就可以。使用此启动类型应同一时候指定 PIDFile=,以便systemd能够跟踪服务的主进程。
- Type=oneshot:这一选项适用于仅仅执行一项任务、随后马上退出的服务。可能须要同一时候设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然觉得服务处于激活状态。
- Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。
这一通知的实现由 libsystemd-daemon.so 提供。
- Type=dbus:若以此方式启动。当指定的 BusName 出如今DBus系统总线上时。systemd觉得服务就绪。
- Type=idle: systemd会等待全部任务处理完毕后。才開始执行idle类型的单元。
其它行为和Type=simple 相似。
type的很多其它解释能够參考 systemd.service(5)。
改动现存单元文件
为了避免和 pacman 冲突,不应该直接编辑软件包提供的文件. 要更改由软件包提供的单元文件,先创建名为 /etc/systemd/system/<单元名>.d/ 的文件夹(如 /etc/systemd/system/httpd.service.d/)。然后放入 *.conf 文件,当中能够加入或重置參数。这里设置的參数优先级高于原来的单元文件。
比如。假设想加入一个额外的依赖。创建这么一个文件就可以:
/etc/systemd/system/<unit>.d/customdependency.conf
[Unit]
Requires=<新依赖>
After=<新依赖>
As another example, in order to replace the ExecStart directive for a unit that is not of type oneshot, create the following file:
/etc/systemd/system/unit.d/customexec.conf
[Service]
ExecStart=
ExecStart=new command
想知道为什么改动 ExecStart 前必须将其置空,參见 ([1]).
下面是自己主动重新启动服务的一个样例:
/etc/systemd/system/unit.d/restart.conf
[Service]
Restart=always
RestartSec=30
然后执行下面命令使更改生效:
# systemctl daemon-reload
# systemctl restart <单元>
此外,把旧的单元文件从 /usr/lib/systemd/system/ 拷贝到 /etc/systemd/system/,然后进行改动,也能够达到相同效果。
在 /etc/systemd/system/ 文件夹中的单元文件的优先级总是高于 /usr/lib/systemd/system/ 文件夹中的同名单元文件。注意,当 /usr/lib/ 中的单元文件因软件包升级变更时,/etc/ 中自己定义的单元文件不会同步更新。此外,你还得执行 systemctl reenable 。手动又一次启用该单元。因此。建议使用前面一种利用 *.conf 的方法。
小贴士: 用 systemd-delta 命令来查看哪些单元文件被覆盖、哪些被改动。
系统维护的时候须要及时了解哪些单元已经有了更新。
安装 name=vim-systemd">vim-systemd
目标(target)
启动级别(runlevel)是一个旧的概念。
如今,systemd 引入了一个和启动级别功能相似又不同的概念——目标(target)。不像数字表示的启动级别,每一个目标都有名字和独特的功能,而且能同一时候启用多个。一些目标继承其它目标的服务,并启动新服务。
systemd 提供了一些模仿 sysvinit 启动级别的目标。仍能够使用旧的 telinit 启动级别 命令切换。
获取当前目标
不要使用 runlevel 命令了:
$ systemctl list-units --type=target
创建新目标
在 Fedora 中,启动级别 0、1、3、5、6 都被赋予特定用途。而且都对应一个 systemd 的目标。然而,没有什么非常好的移植用户定义的启动级别(2、4)的方法。要实现相似功能,能够以原有的启动级别为基础。创建一个新的目标 /etc/systemd/system/<新目标>(能够參考 /usr/lib/systemd/system/graphical.target),创建 /etc/systemd/system/<新目标>.wants 文件夹,向当中加入额外服务的链接(指向 /usr/lib/systemd/system/ 中的单元文件)。
目标表
| SysV 启动级别 | Systemd 目标 | 凝视 |
|---|---|---|
| 0 | runlevel0.target, poweroff.target | 中断系统(halt) |
| 1, s, single | runlevel1.target, rescue.target | 单用户模式 |
| 2, 4 | runlevel2.target, runlevel4.target, multi-user.target | 用户自己定义启动级别。通常识别为级别3。 |
| 3 | runlevel3.target, multi-user.target | 多用户,无图形界面。用户能够通过终端或网络登录。 |
| 5 | runlevel5.target, graphical.target | 多用户。图形界面。继承级别3的服务。并启动图形界面服务。 |
| 6 | runlevel6.target, reboot.target | 重新启动 |
| emergency | emergency.target | 急救模式(Emergency shell) |
切换启动级别/目标
systemd 中。启动级别通过“目标单元”訪问。通过例如以下命令切换:
# systemctl isolate graphical.target
该命令对下次启动无影响。
等价于telinit 3 或 telinit 5。
改动默认启动级别/目标
开机启动进的目标是 default.target。默认链接到 graphical.target (大致相当于原来的启动级别5)。
能够通过内核參数更改默认启动级别:
- systemd.unit=multi-user.target (大致相当于级别3)
- systemd.unit=rescue.target (大致相当于级别1)
还有一个方法是改动 default.target。能够通过 systemctl 改动它:
# systemctl set-default multi-user.target
要覆盖已经设置的default.target。请使用 force:
# systemctl set-default -f multi-user.target
能够在 systemctl 的输出中看到命令执行的效果:链接 /etc/systemd/system/default.target 被创建。指向新的默认启动级别。
systemctl介绍的更多相关文章
- 手动编译安装Libvirt之后利用systemctl管理libvirtd服务
因为要给特殊的虚拟机关联文件指定selinux标签,而默认的Libvirt没有这个功能,所以需要修改LIbvirt源代码,重新编译安装Libvirt,而手动编译安装的LIbvirt,没有办法使用sys ...
- CentOS7 利用systemctl添加自定义系统服务
一.命令systemctl介绍 CentOS 7.0中已经没有service命令,而是启用了systemctl服务器命令,它实际上将 service 和 chkconfig 这两个命令组合到一起. 命 ...
- CentOS7系统服务管理systemctl
目录 一.systemctl介绍 二.systemctl常用命令 1.启动服务 2.停止服务 3.重启服务 4.查看服务是否已启动 5.查看服务的状态 6.启用开机自启动服务 7.停用开机自启动服务 ...
- Linux 之CentOS7使用firewalld打开关闭防火墙与端口
一.firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status f ...
- Linux中systemctl命令详细介绍
Linux Systemctl是一个系统管理守护进程.工具和库的集合,用于取代System V.service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器.通过Syst ...
- Linux Systemd 详细介绍: Unit、Unit File、Systemctl、Target
Systemd 简介 CentOS 7 使用 Systemd 替换了SysV Ubuntu 从 15.04 开始使用 Systemd Systemd 是 Linux 系统工具,用来启动守护进程,已成为 ...
- supervisor的安装与简单介绍
1,介绍 Supervisor是一个进程管理工具,官方的说法 用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断.当进程中断的时候我希望能自动重新启动它,此时,我就需要 ...
- Saltstack 介绍、安装、配置(一)
Slatstack 介绍 官网:https://saltstack.com/ 官方源:http://repo.saltstack.com/ (介绍各操作系统安装方法) http://repo.sal ...
- 在CentOS7上使用systemctl配置tomcat
最近买了一台阿里云,现在阿里云CentOS都已经支持7了(前面都是使用CentOS6),索性直接使用CentOS7,7上面目前最大区别就是service变成了现在的systemctl,简单的查了一下并 ...
随机推荐
- mongodb批量操作, bulk_write,
需要批量操作时候,节省网络连接交互次数,可以使用 bulk_write. 设置ordered=False,因为批量操作中没有互相依赖关系,如果有前后顺序的互相依赖,需要设置为True. bed_typ ...
- [Node.js] 00 - Where do we put Node.js
Ref: 前后端分离的思考与实践(五篇软文) 其实就是在吹淘宝自己的Midway-ModelProxy架构. 第一篇 起因 为了提升开发效率,前后端分离的需求越来越被重视, 同一份数据接口,我们可以定 ...
- 《objective-c基础教程》学习笔记(六)—— 复合方法
今天我们要讲的复合,当然不是小情侣吵着分手,然后又在一起的复合. 复合遵循一个合成复用原则,又称为组合或者聚合复用原则.该原则的内容是:尽量使用对象组合,而不是继承来达到复用的目的.用聚合可以使系统更 ...
- Web文件上传方法总结大全
1. 表单上传 这是传统的form表单上传,使用form表单的input[type=”file”]控件,可以打开系统的文件选择对话框,从而达到选择文件并上传的目的,它的好处是多浏览器兼容,它是web开 ...
- oracle 学习笔记(2)创建表空间及用户授权
原文:http://www.cnblogs.com/smartvessel/archive/2009/07/06/1517690.html Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的 ...
- SpringBoot(十四)-- 整合Swagger2
1.pom依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-s ...
- 微信小游戏 main.js没有被压缩
发布时,发现main.js没有被压缩. 在config.wxgame.ts里增加如下图.
- NHibernate中Session的处理 线程不安全
NHibernate中Session是线程不安全的,而且每次数据库操作 请求创建Session时对性能有些影响.在Windows应用中可以通过 [ThreadStatic]特性很简单的就可以实现线程安 ...
- 3、CSS属性组成和作用
3:CSS属性组成和作用 学习目标 1.css属性和属性值的定义 2.css文本属性 3.css列表属性 4.css背景属性 5.css边框属性 6.css浮动属性 一.css属性和属性值的定义 属性 ...
- db2 Reorgchk:重组检查,是否需要重组
Reorgchk:重组检查,是否需要重组.判断表或索引是否需要重组,有2种方法:1.通过reorgchk工具 reorgchk工具利用8个公式(3个表公式,5个索引公式),如果表统计结果F1,F2或 ...