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