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.weekly
和cron.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