基础[Linux] crontab 定时器任务

298 阅读3分钟

定时器任务

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                          # 打开调试开关