Systemd学习介绍

来源:互联网 发布:linux fortran 编辑:程序博客网 时间:2024/06/06 07:10
1. Systemd是什么?
Systemd是一种新的linux系统服务管理器。(d => daemon)
它替换了init系统,能够管理系统启动过程和一些系统服务,一旦启动起来,就将监管整个系统。
传统的init进程启动方式的两大弊端:
一是启动时间长。(串行启动)
二是启动脚本复杂。
Systemd:
并行启动服务,
按需启动守护进程,
自动化服务依赖关系


2. Systemd干啥的?
启动守护进程
在systemd管理体系中,被管理的deamon(守护进程)称作unit(单元)
单元主要包括:
service, target, mount, sockets, path, timer


3. Systemd的使用
systemctl是 Systemd 的主命令,用于管理系统。
# 列出正在运行的 Unit
$ systemctl list-units


# 显示系统状态
$ systemctl status
# 显示单个 Unit 的状态
$ sysystemctl status bluetooth.service


# 立即启动一个服务
$ sudo systemctl start apache.service
# 立即停止一个服务
$ sudo systemctl stop apache.service
# 重启一个服务
$ sudo systemctl restart apache.service
# 杀死一个服务的所有子进程
$ sudo systemctl kill apache.service
# 重新加载一个服务的配置文件
$ sudo systemctl reload apache.service


Systemd 默认从目录/etc/systemd/system/读取配置文件。
但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,
真正的配置文件存放在那个目录。
systemctl enable命令用于在上面两个目录之间,建立符号链接关系。




单元配置文件格式:
[Unit]
Description=ATD daemon


[Service]
Type=forking
ExecStart=/usr/bin/atd


[Install]
WantedBy=multi-user.target


[Unit]区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系。
Description:简短描述
Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败
Wants:与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败
BindsTo:与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行
Before:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动
After:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动
Conflicts:这里指定的 Unit 不能与当前 Unit 同时运行


[Service]区块用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下。
Type:定义启动时的进程行为。
Type=simple:默认值,执行ExecStart指定的命令,启动主进程
Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出
Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行
Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行
ExecStart:启动当前服务的命令
ExecStartPre:启动当前服务之前执行的命令
ExecStartPost:启动当前服务之后执行的命令
ExecReload:重启当前服务时执行的命令
ExecStop:停止当前服务时执行的命令
ExecStopPost:停止当其服务之后执行的命令
RestartSec:自动重启当前服务间隔的秒数
Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数


[Install]区块,定义如何安装这个配置文件,即怎样做到开机启动。
WantedBy字段:表示该服务所在的 Target。(启动某个target的时候,该target下面的所有服务会被启动)
(默认的启动 Target 是multi-user.target, 在这个组里的所有服务,都将开机启动)


参考资料:
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html
https://wiki.archlinux.org/index.php/Systemd_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#.E7.BC.96.E5.86.99.E5.8D.95.E5.85.83.E6.96.87.E4.BB.B6
原创粉丝点击