systemd是linux用来守护进程的。d即daemon(守护进程)

我们通过systemctl命令管理守护进程.

systemctl 命令

1
sudo systemctl start/stop/enable/reload unit.service

使用上述命令开启/停止/设置自启动/重载 某个服务。

1
sudo systemctl daemon-reload 重载修改过的配置文件.

Unit

systemd对每项系统资源称为Unit

一共有12种Unit.

  • Service Unit:系统服务
  • Target Unit:多个 Unit 构成的一个组
  • Device Unit:硬件设备
  • Mount Unit:文件系统的挂载点
  • Automount Unit:自动挂载点
  • Path Unit:文件或路径
  • Scope Unit:不是由 Systemd 启动的外部进程
  • Slice Unit:进程组
  • Snapshot Unit:Systemd 快照,可以切回某个快照
  • Socket Unit:进程间通信的 socket
  • Swap Unit:swap 文件
  • Timer Unit:定时器

本文中我们只关注用的比较多的Service和Timer

Unit 配置 Unit配置文件通常在/usr/lib/systemd/system/中。

一个.service文件:

1
2
3
4
5
6
7
8
[Unit]
Description= # 描述
Documentation= # 文档地址
Requires= #依赖于其他service
[Service]
ExecStart= # 执行地址
[Install]
WantedBy= # target

Requires中写的是其他unit,如果其他unit未运行,本unit将启动失败。 WantedBy一般写的是multi-user.target。

Target 是 systemd用以代替RunLevel的,multi-user.target即init 3(多用户,系统正常启动)

一个Unit想要能被启动,必须有Install

Timer 配置 除了基础的[Unit] [Install] 还需要有 [Timer]

1
2
3
[Timer]
OnUnitActiveSec=1h
Unit=mytimer.service
  • OnActiveSec:定时器生效后,多少时间开始执行任务
  • OnBootSec:系统启动后,多少时间开始执行任务
  • OnStartupSec:Systemd 进程启动后,多少时间开始执行任务
  • OnUnitActiveSec:该单元上次执行后,等多少时间再次执行
  • OnUnitInactiveSec: 定时器上次关闭后多少时间,再次执行
  • OnCalendar:基于绝对时间,而不是相对时间执行
  • AccuracySec:如果因为各种原因,任务必须推迟执行,推迟的最大秒数,默认是60秒
  • Unit:真正要执行的任务,默认是同名的带有.service后缀的单元
  • Persistent:如果设置了该字段,即使定时器到时没有启动,也会自动执行相应的单元
  • WakeSystem:如果系统休眠,是否自动唤醒系统

参考: