Restart 当设置为 Restart=1 时,如果服务终止,就会自动重启此服务。
RestartSec 与 Restart 配合使用,在服务终止多长时间之后才重新启动它。默认是 100ms。
KillMode
可以是 process, control-group, none 中的一种,如果是 process 则服务终止时,只会终止主要的程序(ExecStart接的后面那串指令),如果是 control-group 时,则由此 daemon 所产生的其他 control-group 的程序,也都会被关闭。如果是 none 的话,则没有程序会被关闭。
TimeoutSec
若这个服务在启动或者是关闭时,因为某些缘故导致无法顺利 "正常启动或正常结束" 的情况下,则我们要等多久才进入 "强制结束" 的状态!
RemainAfterExit
当设置为 RemainAfterExit=1 时,则当这个服务所属的所有程序都终止之后,此服务会再尝试启动。这对于 Type=oneshot 的服务很有帮助!
环境变量的设置对很多程序来说都是十分重要的,下面的配置则可以以不同的方式为服务程序设置环境变量:
Environment 用来设置环境变量,可以使用多次:
[Service]
# Client Env Vars
Environment=ETCD_CA_FILE=/path/to/CA.pem
Environment=ETCD_CERT_FILE=/path/to/server.crtEnvironmentFile 通过文件的方式设置环境变量,可以把下面的内容保存到文件 testenv 中:
AAA_IPV4_ANCHOR_0=X.X.X.X
BBB_IPV4_PRIVATE_0=X.X.X.X
CCC_HOSTNAME=test.example.com然后这样设置:
[Service]
EnvironmentFile=/testenv接下来就可以在 ExecStart 配置中使用在文件中设置的环境变量,如:
ExecStart=/xxx --abc=xx${AAA_IPV4_ANCHOR_0}yy[Install] 部分
WantedBy 这个设置后面接的大部分是 *.target unit。意思是,这个 unit 本身是附挂在哪个 target unit 下面。
Also 当目前这个 unit 被 enable 时,Also 后面接的 unit 也要 enable 的意思。
Alias 当 systemctl enable 相关的服务时,则此服务会进行链接文件的创建!
Timer 类型 unit 的详细配置
Timer 类型的 unit 主要用来执行定时任务,并有可能取代 cron 服务。由于 timer 类型的 unit 经常与服务类型的 unit 一起使用,所以本文也附带介绍一下 timer unit 的配置。与服务类型的 unit 不同,timer unit 配置文件中的主要部分是 [Timer],下面是其主要的配置项:
OnActiveSec 当 timers.target 启动后多久才执行这个 unit。
OnBootSec 当开机后多久才执行这个 unit。
OnStartupSec 当 systemd 第一次启动后多久才执行这个 unit。
OnUnitActiveSec 这个 timer 配置文件所管理的那个 unit 服务在最后一次启动后,隔多久后再执行一次。
OnUnitInactiveSec 这个 timer 配置文件所管理的那个 unit 服务在最后一次停止后,隔多久后再执行一次。
Unit 一般不需要设置,基本上我们设置都是 服务名称.server + 服务名称.timer。如果你的服务名称和 timer 名称不相同,就需要在 .timer 文件中通过 Unit 项指定服务的名称。
OnCalendar 使用实际时间(非循环时间)的方式来启动服务。
Persistent 当使用 OnCalendar 的设置时,指定该功能要不要持续执行。
通过上面的介绍,相信大家对 systemd 服务类型和 timer 类型的 unit 配置已经有了基本的理解,下面让就让我们配置两个实际的例子。
配置 Redis 服务
在 Ubuntu 上我们一般会手动编译并安装 redis。在安装完成后需要把 redis 配置为 systemd 管理的服务,下面介绍具体的配置过程。
添加 redis 配置文件
首先手动创建 /etc/redis 目录并添加配置文件:
$ sudo mkdir /etc/redis并把代码目录中的配置文件 redis.conf 拷贝到 /etc/redis 目录中:
$ sudo cp /tmp/redis-4.0.0/redis.conf /etc/redis/然后修改配置文件 /etc/redis/redis.conf 中的 supervised 为 systemd:
supervised systemd
接着继续在配置文件 /etc/redis/redis.conf 中配置工作目录,把 dir ./ 修改为:
dir /var/lib/redis
配置由 systemd 管理 redis 服务
创建 /etc/systemd/system/redis.service 文件
$ sudo vim /etc/systemd/system/redis.service编辑其内容如下:
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target
启动服务并配置为开机启动:
$ sudo systemctl start redis
$ sudo systemctl enable redis
$ sudo systemctl status redis
通过脚本定时备份文件
备份文件的 bash 脚本: