使用 systemd 每 30 分钟运行一次脚本

使用 systemd 每 30 分钟运行一次脚本

我想在启动系统后每 30 分钟执行一个脚本。我知道你可以使用 cron,但我不打算经常使用这个功能,因此我想用 systemd 来尝试一下。

到目前为止,我只找到了单调计时器,它允许执行一次某件事(至少我这么认为)。如果我想从引导/系统启动后每 30 分钟执行一次某些操作,那么 和 会是什么样子foo.timer[email protected]

[电子邮件受保护]

[Unit]
Description=run foo
Wants=foo.timer

[Service]
User=%I
Type=simple
ExecStart=/bin/bash /home/user/script.sh

foo.timer

[Unit]
Description=run foo

[Timer]
where I am stuck... ???

答案1

您需要创建两个文件:一个用于服务,另一个用于同名的计时器。

例子:

/etc/systemd/system/test.service

[Unit]
Description=test job

[Service]
Type=oneshot
ExecStart=/bin/bash /tmp/1.sh

/etc/systemd/system/test.timer

[Unit]
Description=test

[Timer]
OnUnitActiveSec=10s
OnBootSec=10s

[Install]
WantedBy=timers.target

之后使用命令重新加载 systemdsystemctl daemon-reload并通过 启动计时器systemctl start test.timer,或者默认启用它 ( systemctl enable test.timer)。

测试内容为1.sh

#!/bin/bash
echo `date` >> /tmp/2

并命令检查所有可用的计时器: systemctl list-timers --all

有关项目的更多详细信息以及关于的例子ArchLinux 页面

答案2

这是不使用计时器的另一种选择。如果时间不是非常关键并且脚本运行时间不长,那么对于简单的事情来说就很好了。

[Unit]
Description=Run foo

[Service]
User=%I
Restart=always
RestartSec=1800s
ExecStart=/bin/bash /home/user/script.sh

答案3

正确的方法是使用systemd-run您可以安排您的工作,而不需要定义您自己的单位。

它允许您按日历或每个时间段进行安排。假设 MYSELF 是您的完整路径应用程序:

systemd-run --user --on-calendar '*:0/1' ${MYSELF} <args>

相关内容