利用systemd的定时器来定时停止服务

需求背景: 

有时候我们有这样的一种需求:需要一些服务在定时运行一段时间后就停止。实现这种需求的方法有许多种,这里介绍一种基于systemd实现方式。

场景:希望在dockerd服务在每次启动1个小时后就关闭服务。

实现:利用systemd中的timer来实现。

 

具体方法

1 创建定时器处理服务

    在/usr/lib/systemd/system/目录下创建dockertimer.service,内容如下:

[Unit]
Description=docker stop Timer

[Service]
ExecStart=/bin/systemctl stop docker

    上面的"/bin/systemctl stop docker"就是定时器到期后要执行的命令,即停止docker服务。

2 创建定时器

    在/usr/lib/systemd/system/中docker.timer,内容如下:

[Unit]
Description=stop docker timer in 1 min

[Timer]
OnActiveSec=1h
Unit=dockertimer.service

    上面的内容定义了一个定时器,其中OnActiveSec=1h表示在定时器启动1h后开始触发dockertimer.service服务执行。

3 定时器的触发与停止

上面定时器需要有人去触发才能够启动;同时在不需要的时候还要将其关闭。集合我们的实际应用,将两个动作放到docker服务中来完成。实现如下:

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/bin/dockerd -H fd://
+ExecStartPost=/bin/systemctl start sshd.timer
ExecReload=/bin/kill -s HUP $MAINPID
+ExecStop=/bin/systemctl stop sshd.timer
LimitNOFILE=1048576

 

结语:好了,上面就创建好了一个定时器。每当docker服务启动后1个小时就会主动stop掉docker服务;

 

参考:

https://linux.cn/article-10301-1.html

http://www.ruanyifeng.com/blog/2018/03/systemd-timer.html

https://www.centosdoc.com/system/201.html

 

你可能感兴趣的:(工具,我爱编程)