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

问题描述 投票:0回答:4

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

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

systemd 计时器中是否有“终止计时器”选项或类似的选项>

timer systemd coreos
4个回答
0
投票

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

JobTimeoutSec=43200

您可能只需编写一个包装脚本来在 12 小时后终止该进程或使用

timeout 12h COMMAND [ARG]...


0
投票

您可以简单地编写另一个计时器,安排在您想要的关闭时间运行。他们可以运行一项服务,通过在称为关闭计时器的服务文件中运行

ExecStart=/bin/systemctl stop other.service
来停止您想要的服务。

我查看了来自

JobTimeoutSec
man systemd.unit
的文档,但似乎不是适合这项工作的工具。


0
投票

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

使用

RuntimeMaxSec
选项获取
Type=simple
服务:

[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 秒后终止。

有关

RuntimeMaxSec
TimeoutStartSec
的详细信息可以在这里找到: https://www.freedesktop.org/software/systemd/man/systemd.service.html


0
投票

使用 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有冲突,如果后者正在运行,前者会停止后者。

© www.soinside.com 2019 - 2024. All rights reserved.