参考:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.htmlhttp://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

是什么

Systemd 用来管理 Linux 下启动的后台任务/服务(守护进程),提供开机自启、服务状态检测、启动、停止、重启等功能。

Systemd 本身为 Linux 的 1 号进程 (用来替代 之前的 init)

常用命令

Unit 状态

# 列出所有服务
systemctl list-units --all
# 系列的对单个 Unit 的操作
# 状态
systemctl status sshd.service
# 显示某个 Unit 是否正在运行
systemctl is-active application.service
# 显示某个 Unit 是否处于启动失败状态
systemctl is-failed application.service
# 显示某个 Unit 服务是否建立了启动链接
systemctl is-enabled application.service

Unit 管理

# 立即启动一个服务
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
# 开机自启
sudo systemctl enable httpd
# 重载所有修改过的配置文件
sudo systemctl daemon-reload
# 显示某个 Unit 的所有底层参数
systemctl show httpd.service
# 显示某个 Unit 的指定属性的值
systemctl show -p CPUShares httpd.service
# 设置某个 Unit 的指定属性
sudo systemctl set-property httpd.service CPUShares=500

查看日志

# 查看某个 Unit 的日志
sudo journalctl -u nginx.service
sudo journalctl -u nginx.service --since today

# 实时滚动显示某个 Unit 的最新日志
sudo journalctl -u nginx.service -f

配置文件

https://wiki.archlinux.org/index.php/systemd_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

位置

  • /usr/lib/systemd/system
  • /etc/systemd/system

配置文件格式

类似于 ini 格式

  • 不支持行尾注释
  • 大小写敏感

Unit

配置启动顺序和依赖关系,其他 略

Service

Type 字段

  • simple(默认值):ExecStart字段启动的进程为主进程,一般启动的命令是不可以退出的(一直阻塞)
  • forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程,nohup & 方式启动的程序
  • oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务
  • dbus:类似于simple,但会等待 D-Bus 信号后启动
  • notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
  • idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合

区别:https://superuser.com/questions/1274901/systemd-forking-vs-simple/1274913

命令

区块定义如何启动当前服务。

[Service]
# 启动命令
EnvironmentFile=环境变量文件
ExecStart=/bin/echo execstart1
ExecStartPost=/bin/echo post1

命令 支持 使用 - 开头,表示命令报错忽略。比如 ExecStartPre=-exit 1,全部脚本相关如下

  • ExecReload字段:重启服务时执行的命令
  • ExecStop字段:停止服务时执行的命令
  • ExecStartPre字段:启动服务之前执行的命令
  • ExecStartPost字段:启动服务之后执行的命令
  • ExecStopPost字段:停止服务之后执行的命令

Install

  • WantedBy 字段 表示该服务所在的 Target。

表示在配置开机自启时,该服务在哪个步骤启动,一般配置为 default.target 或者 graphical.target 或者 multi-user.target

参见 https://www.freedesktop.org/software/systemd/man/bootup.html#System%20Manager%20Bootup

重新加载配置文件

# 重新加载配置文件
sudo systemctl daemon-reload

# 重启相关服务
sudo systemctl restart foobar