#介绍
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