定时器任务
crontab是linux下的定时器管理工具,我们可以通过该命令实现系统定时任务的周期性编排
获取定时器
本人使用arch操作系统,需使用yay或pacman安装,而cron在package中有多种实现,我选择的是cronie
yay -S cronie
设置开机自动启动
安装定时器任务后,我们需要在开机时自动执行,安装的软件包一般已经提供了systemctl控制文件,我们可以通过systemct查看该服务的状态
➜ ~ systemctl status cronie.service
○ cronie.service - Periodic Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/cronie.service; disabled; preset: >
Active: inactive (dead)
lines 1-3/3 (END)
上图反应的是该服务是关闭状态,我们应该激活并启动该服务
➜ ~ systemctl enable cronie.service
➜ ~ systemctl status cronie.service
○ cronie.service - Periodic Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/cronie.service; enabled; preset: disabled)
Active: inactive (dead)
➜ ~
➜ ~ systemctl status cronie.service
○ cronie.service - Periodic Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/cronie.service; enabled; preset: disabled)
Active: inactive (dead)
# 启动服务
➜ ~ systemctl start cronie.service
➜ ~ systemctl status cronie.service
● cronie.service - Periodic Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/cronie.service; enabled; preset: disabled)
Active: active (running) since Sun 2023-08-06 20:04:58 CST; 2s ago
Main PID: 535928 (crond)
Tasks: 1 (limit: 77013)
Memory: 964.0K
CPU: 1ms
CGroup: /system.slice/cronie.service
└─535928 /usr/bin/crond -n
定时器任务编排
我们使用 crontab -e 进入定时器任务的文本编辑器中编写定时器执行策略
crontab的格式
crontab的格式如下
分 时 日 月 星期 执行的命令
- 分----------0-59
- 时----------0-23
- 日----------0-31
- 月----------0-12
- 星期---------0-6
- 执行的命令----一般指shell所在的绝对位置
每个日期数据项都可以设置通配符,crontab支持以下特殊符号
* 通配符,所有支持的时间值
, 用,分隔多个时间
- 连接两个数值,给出一个范围
/ 指定一个周期或频率
根据archlinux官网的例子
*/5 9-16 - 1-5,9-12 1-5 ~/test.sh
表示会在周内从早上9点到下午4点55分,每隔5分钟执行一次脚本,除了6-8月不执行
同时crontab还支持特定关键字,便于快速编排
@reboot启动时执行@yearly每年执行一次@annually每年执行一次@monthly每月执行一次@weekly每周期执行一次@daily每天执行一次@midnight每天的午夜执行一次@hourly每小时执行一次
如
@reboot ~/test.sh # 启动时执行一次
crontab同时具备一些基础命令
-u <user> define user # 操作指定用户的定时任务
-e edit user's crontab # 编辑定时器
-l list user's crontab # 列出已设置的定时器任务列表
-r delete user's crontab # 删除用户设置的定时器任务
-i prompt before deleting #
-n <host> set host in cluster to run users' crontabs# 设置集群中的主机运行用户的的crontab
-c get host in cluster to run users' crontabs# 获取集群中的主机以运行用户的crontab
-T <file> test a crontab file syntax # 测试crontab文件的语法
-V print version and exit # 打印版本并退出
-x <mask> enable debugging # 打开调试开关