systemd-timer

尽管 cron 是从古至今最著名的作业调度程序,但 systemd-timer 也是一种替代选择。 作为 Ubuntu 粉,自然要用系动自带的 systemd-timer。

参考https://wiki.archlinux.org/title/Systemd/Timers

操作系统:Ubuntu 24.04.1 LTS

应用场景

每天开机,习惯去 V 站签到,领取铜币,需要打开 chrome,点击领取奖励,领取,4个步骤, 遂想将其脚本化,并每次开机后自动调用脚本,领取奖励。

自动脚本

脚本实现见:https://github.com/memorycancel/cra/tree/main/v2ex_redeem

定时器

定时器有两大类:

  • 实时定时器(又称挂钟定时器)Realtime timers (a.k.a. wallclock timers)根据日历事件激活,与 cronjobs 的激活方式相同。选项 OnCalendar= 用于定义它们。
  • 单调定时器在相对于不同起点的时间跨度后激活。如果计算机暂时中止或关闭,它们就会停止。有许多不同的单调计时器,但它们的形式都是一样的: OnTypeSec= .常见的单调定时器包括 OnBootSec 和 OnUnitActiveSec 。

每个 .timer 文件都有一个匹配的 .service 文件(如 foo.timer 和 foo.service )。

创建 Unit

参考2024-11-12-Linux-startup-script.html

sudo vi /etc/systemd/system/v2ex_redeem.service
[Unit]
Description=V2EX daily redeem
After=network.target

[Service]
Type=oneshot
ExecStart=/bin/bash -l -c /home/memorycancel/git/cra/main.sh

[Install]
WantedBy=default.target

大多数使用systemd是守护进程需求,而此处是一次性脚本,所以需要设置 Type=oneshot 并且 systemd 不会载入任何环境变量 ENV 和bash上下文。

sudo systemctl daemon-reload
sudo systemctl start v2ex_redeem
sudo systemctl status v2ex_redeem

添加单调计时器 Monotonic Timer

定时器将在开机 5 分钟后启动。

sudo vi /etc/systemd/system/v2ex_redeem.timer
[Unit]
Description=开启领取 V2EX 奖励

[Timer]
OnBootSec=5min

[Install]
WantedBy=timers.target

管理查看定时器

sudo systemctl list-timers --all

1

sudo systemctl status v2ex_redeem

2