我想在启动系统后每 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>