Tom*_*Tom 31 linux scheduling systemd services
我想在启动到系统后每 30 分钟执行一次脚本。我知道您可以使用 cron,但我不打算经常使用此功能,因此我想在 systemd 上尝试一下。
到目前为止,我只找到了允许执行一次的单调定时器(至少我是这么认为的)。如果我想从启动/系统启动每 30 分钟执行一次,那么foo.timer和foo@user.service会是什么样子?
foo@user.service
[Unit]
Description=run foo
Wants=foo.timer
[Service]
User=%I
Type=simple
ExecStart=/bin/bash /home/user/script.sh
Run Code Online (Sandbox Code Playgroud)
foo.timer
[Unit]
Description=run foo
[Timer]
where I am stuck... ???
Run Code Online (Sandbox Code Playgroud)
Rei*_*hin 37
您需要创建两个文件:一个用于服务,另一个用于具有相同名称的计时器。
例子:
/etc/systemd/system/test.service
[Unit]
Description=test job
[Service]
Type=oneshot
ExecStart=/bin/bash /tmp/1.sh
Run Code Online (Sandbox Code Playgroud)
/etc/systemd/system/test.timer
[Unit]
Description=test
[Timer]
OnUnitActiveSec=10s
OnBootSec=10s
[Install]
WantedBy=timers.target
Run Code Online (Sandbox Code Playgroud)
之后使用命令重新加载 systemdsystemctl daemon-reload并通过 启动计时器systemctl start test.timer,或默认启用它 ( systemctl enable test.timer)。
测试内容 1.sh
#!/bin/bash
echo `date` >> /tmp/2
Run Code Online (Sandbox Code Playgroud)
以及检查所有可用计时器的命令:
systemctl list-timers --all
项目页面上的更多详细信息和ArchLinux 页面上的示例
hoo*_*enz 17
这是不使用计时器的另一种选择。如果时间不是非常关键并且脚本运行时间不长,那么对于简单的事情就可以了。
[Unit]
Description=Run foo
[Service]
User=%I
Restart=always
RestartSec=1800s
ExecStart=/bin/bash /home/user/script.sh
Run Code Online (Sandbox Code Playgroud)
fcm*_*fcm 10
正确的方法是使用systemd-run您可以安排您的工作,而不需要定义您自己的单位。
它允许您按日历或每个时间段进行安排。假设 MYSELF 是您的完整路径应用程序:
systemd-run --user --on-calendar '*:0/1' ${MYSELF} <args>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46730 次 |
| 最近记录: |