如何为systemd计时器配置结束时间



我正在使用CoreOS和SystemD计时器来运行我的报告。。。

我有一些监控报告,需要在接下来的12小时内每3小时运行一次,每半小时运行。如果我想在1230醒来以停止报告,那么实现起来非常简单。

systemd-timers>

中是否有"终止计时器"选项或类似选项

我相信您可以将以下内容添加到服务文件的[Unit]指令中:

JobTimeoutSec=43200

您可能只需要编写一个包装脚本来在12小时后终止进程,或者使用timeout 12h COMMAND [ARG]...

您只需编写另一个定时器,该定时器计划在您想要的关闭时间运行。他们可以通过在名为关闭计时器的服务文件中运行ExecStart=/bin/systemctl stop other.service来运行一个停止您想要停止的服务。

我查看了man systemd.unitJobTimeoutSec的文档,似乎不是适合该工作的工具。

在一定时间后可以终止systemd服务。

Type=simple服务使用RuntimeMaxSec选项:

[Unit]
Description=Terminate simple Service Test
[Service]
Type=simple
RuntimeMaxSec=5
ExecStart=/bin/sleep 10

TimeoutStartSec用于Type=oneshot服务:

[Unit]
Description=Terminate oneshot Service Test
[Service]
Type=oneshot
TimeoutStartSec=5
ExecStart=/bin/sleep 10

在睡眠计时器达到10秒之前,这两项服务将在5秒后终止。

关于RuntimeMaxSecTimeoutStartSec的详细信息,请点击此处:https://www.freedesktop.org/software/systemd/man/systemd.service.html

使用RuntimeMaxSec可能导致服务无法在正确的时间停止。例如,如果您想在特定时间(上午8点)启动服务,但有一天由于故障而不得不手动启动服务。在这种情况下,服务将不会在您期望的时间完成,它将在timestart+RuntimeMaxSec完成。

要解决此问题,您可以使用参数Conflicts=test.service:创建另一个服务

[Unit]
Description=Stop Test service
Conflicts=test.service
[Service]
Type=simple
ExecStart=/bin/bash -c 'echo "stopping test service"'
WorkingDirectory=/root
StandardOutput=inherit
StandardError=inherit
Restart=on-failure
RestartSec=10
User=root

并且包括用于在特定时间执行停止服务的计时器:

[Unit]
Description=Run stop test service
[Timer]
# Run every day at 23:55h
OnCalendar=Mon..Sun 23:55
[Install]
WantedBy=timers.target

由于服务stop与服务test冲突,如果后者正在运行,则前者将停止后者。

最新更新