Linux 使用 Cron 创建定时任务

date
Oct 13, 2022
slug
schedule-tasks-with-cron
status
Published
tags
System
summary
Cron 是一个实用的 Linux 工具, 可以利用它定时执行命令或脚本, 从而将很多流程自动化执行
type
Post
Cron Daemon 保持在后台运行, 每隔一分钟检查注册的任务是否需要执行. 如有需要, 执行对应任务.
因此, Cron 提供了分钟级别的定义定时任务的能力.

语法

首先熟悉 Cron 任务定义语法. 下面给出了其语法定义:
SHELL=/bin/bash
MAILTO=root@example.com
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

# ┌────────── minute (0 - 59)
# │ ┌──────── hour (0 - 23)
# │ │ ┌────── day of month (1 - 31)
# │ │ │ ┌──── month (1 - 12)
# │ │ │ │ ┌── day of week (0 - 6 => Sunday - Saturday, or
# │ │ │ │ │                1 - 7 => Monday - Sunday)
# | | | | |
# * * * * * command to be executed
补充几点:
  • SHELL 表示执行命令时使用的 Shell, PATH 指定路径变量, MAILTO 指定任务执行结果发送的邮箱
  • 使用 * 匹配范围内的所有值
  • 使用 , 分隔需要匹配的多个值, 例如 1,5 将匹配 1 和 5
  • 使用 - 表示范围, 例如 2-4 表示从 2 到 4
  • 使用 / 每隔一段时间匹配, 例如小时部分 10-20/2 表示在 10 点到 20 点, 每 2 小时执行
  • 如果有多条命令, 可以使用 ; 分隔
  • crontab 默认不会读取环境变量, 如果要使用环境变量可以在文件首部定义 (类似 PATH ), 当然也可以在执行自己命令前加上一句执行用户 profile 文件的命令

用法

  • 系统默认配置文件在 /etc/crontab/etc/cron.d 两个目录, Cron Daemon 定期检查这两个目录下的文件
  • 用户创建的任务在 /var/spool/cron 目录, 默认为空
  • 也可以直接将脚本文件放在 /etc 目录下的 cron.hourly , cron.daily , cron.weeklycron.monthly , 每小时, 每天, 每周, 每月定时执行
注意: 如果错过了任务执行时间 (例如当时机器关机) 将会跳过执行.
可以使用 crontab 编辑 Cron 任务:
crontab [-u username]    //省略用户表表示操作当前用户的crontab
    -e      (编辑工作表)
    -l      (列出工作表里的命令)
    -r      (删除工作作)
编辑完成后保存, 系统会自动将文件保存到相应位置.
注意:
  • crontab 文件名中不能含有 .

示例

  • 每隔两天的上午8点到11点的第3和第15分钟执行
    • 3,15 8-11 */2  *  * myCommand
  • 每晚的21:30重启smb
    • 30 21 * * * /etc/init.d/smb restart

参考


© Richard Wang 2021 - 2023