Linux 定时任务

#介绍

Linux 设置定时任务方式显然不止一种,其中常用的两种是 cron 和 systemd-timer。

#cron

在很多 unix-like 系统上,cron 是默认安装的定时任务管理软件,比如在 Debian 上,叫 crontab,但是 Arch linux 默认没有这个,要用 systemd timer。

#systemd timer

在所有使用 systemd 的系统上,都可以使用 systemd timer。timer 比起 cron,功能复杂,日志记录全,对不同时区的处理也更漂亮,同时,systemd 对 cpu 的唤醒更少的同时,更精确。但是,完成着复杂功能的代价就是,配置起来比 cron 更麻烦。

#使用

#crontab

crontab 的定时任务可以使用这个在线工具直接生成,十分方便:crontab-generator

使用也很简单:

crontab -e

打开 cron 任务列表编辑器, 在文件最后粘贴上面工具生成的命令,按下回车留下一行空白。保存退出。

#systemd timer

systemd timer 是以 .timer 结尾的控制文件,同时,每一个 .timer 必须要有同名的 .service 文件,.timer 文件周期激活,控制 .service 文件。比如,用户自己写了一个 acytoo.service 文件,想要这个 service 周期(定时)执行,可以再写一个 acytoo.timer 文件,来定时。

查看当前的定时任务

systemctl list-timers

学习的最好办法就是自己动手改一个试试。查看上面列表中的 .timer

比如,下面是 apt.timer 文件内的内容

[Unit]
Description=Daily apt download activities

[Timer]
OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target

.timer 文件比起 .service 文件最明显的区别就是多了一个 [Timer] 段。实际上也正是这个 [Timer] 段控制着定时任务。 多看,多抄几个不同的 .timer 文件,就会自己写了。

完整的文档,请见man.archlinux.org/man/systemd.timer.5

#参考

unix.stackexchange.com/questions/278564/cron-vs-systemd-timers

wiki.archlinux.org/title/Systemd/Timers