使用 systemd-timer 代替 crontab 执行定时任务
Arch 上已经不预装 crontab 了,但是有全套(?)的 systemd 套件,所以可以用 systemd-timer 来代替定时任务的执行。
这里就讲一下定时(固定时间执行)任务好了,我觉得它的缺点(?)是需要一个 .service
和它相匹配,所以就是有一个 timer
跟着一个 service
,才能把定时任务组合起来。
Service 配置
这里假设我需要执行一个 Python 所写的程序,并且将这个服务命名为 python-timer.service
之后把下列的文件添加进 /etc/systemd/system/
中
[Unit]
Description=Python timer test
Wants=python-timer.timer
[Service]
Type=oneshot
ExecStart=/usr/bin/python -c "import time; print(time.time())"
[Install]
WantedBy=multi-user.target
这个服务会在指定的时候输出当前时间
Timer 配置
那我们也同时需要一个 timer 文件,放在 /etc/systemd/system/
中。这个 timer 文件命名为 python-timer.timer
好了
这里的例子是让其每天的三点钟运行
[Unit]
Description=Python timer test timer
Wants=python-timer.service
[Timer]
Unit=python-timer.service
OnCalendar=*-*-* 4:30:00
[Install]
WantedBy=timers.target
把这两个配置文件写好以后,就执行重载指令
$ sudo systemctl daemon-reload
然后把 timer 启用
$ sudo systemctl enable python-timer.timer
之后我们使用下列指令就能看到 timer 情况了
$ sudo systemctl status python-timer.timer
● python-timer.timer - Python timer test timer
Loaded: loaded (/etc/systemd/system/python-timer.timer; enabled; vendor preset: disabled)
Active: active (waiting) since Thu 2021-04-22 01:12:58 CST; 7s ago
Trigger: Thu 2021-04-22 04:30:00 CST; 3h 16min left
Triggers: ● python-timer.service
Apr 22 01:12:58 systemd[1]: Started Python timer test timer.