Cron 简介
Cron 是类 Unix 系统中用于执行定时任务的工具,我们可以通过 cron 在固定时间、日期、间隔下,运行定期任务(可以是命令和脚本)。cron 最常使用的是服务器运维和管理方向,当然也可用于其他地方,如:定期下载文件等。
The origin of the name cron is from the Greek word for time, χρόνος (chronos).
Cron 的名字来历是古希腊神话中代表时间的神 Chronos
Cron 使用
crond 可以理解为是用来执行定时任务的服务,而 crontab 则是用来管理定时任务的。
要使用 Cron 我们首先得确保自己系统的 crond 守护进程在运行,如果没有,则执行运行命令(什么?你没安装,点这儿)
# 查看 crond 状态
systemctl status crond.service
# 启动 crond
systemctl start crond.serviceCron 任务的管理工具 crontab ,使用格外简单:
# crontab [选项]
#查看当前用户的 crontab,输入
crontab –l
# 编辑 crontab
crontab –e
# 删除 crontab
crontab –r 我们直接 crontab -e 编辑当前用户的定时任务,这里需要用到 Cron 的语法(先直接用后面会讲具体用法)
# 当你执行了 crontab -e 之后,会自动调用VI编辑器打开一个空文件用作输入
# 我们直接输入下面这一行内容,然后:wq 保存退出即可
* * * * * echo `date` >> ~/hello.txt保存成功后,使用 crontab -l,你会发现你的定时任务中已经多了一条,这条任务的作用就是每分钟向 ~/hello.txt 中写入当前系统时间。
$crontab -l
* * * * * echo `date` >> ~/hello.txt静待一会儿,去查看~/hello.txt 你会发现已经有内容了,就意味着我们的定时任务ok啦。
$cat hello.txt
Thu Apr 29 11:07:01 CST 2021
Thu Apr 29 11:08:01 CST 2021
Thu Apr 29 11:09:01 CST 2021
Thu Apr 29 11:10:01 CST 2021
Thu Apr 29 11:11:01 CST 2021如果你不想要这个定时任务了,直接执行 crontab -r 即可,这里如果你只有一个任务,那就直接删掉了。如果你有多个任务,他会自动打开 vi,你只需要删掉不想要的那一行,保存退出即可。
Cron 语法
┌──分钟(0 - 59)
│ ┌──小时(0 - 23)
│ │ ┌──日(1 - 31)
│ │ │ ┌─月(1 - 12)
│ │ │ │ ┌─星期(0 - 6,表示从周日到周六)
│ │ │ │ │
* * * * * <被执行的命令>每部分的取值可以有如下表示方式:
- 逗号(
,)表示列举,例如:1,3,4,7 * * * * echo hello world表示,在每小时的1、3、4、7分时,打印"hello world"。 - 中划线(
-)表示范围,例 如:1-6 * * * * echo hello world,表示,每小时的1到6分钟内,每分钟都会打印"hello world"。 - 星号(
*)代表任何可能的值。例如:在“小时”里的星号等于是“每一个小时”。 - 百分号(
%) 表示“每"。例如:*%10 * * * * echo hello world表示,每10分钟打印一回"hello world"。
Cron 注意事项(这部分不是特别关键)
执行权限问题
- /etc/cron.allow 如果这个文件存在,那么只有被添加到这个文件中的用户才能使用 cron
- /etc/cron.deny 如果 /etc/cron.allow 不存在,但是这个文件存在,那么用户不在这个文件里才能使用cron
定时任务查找位置
/etc/crontab:为系统任务时间表(crontab)。以前用于跑以日为单位、以周为单位、以月为单位的任务,现在用于跑anacron。/etc/cron.d/:该目录包含系统层次的任务时间表(crontabs),不同用户共同使用。/var/spool/cron/:该路径包含用户通过crontab命令创建的任务时间表(crontables),这个不要手动去改哦,要改就通过crontab命令改。
总结
Cron 可以非常方便的帮我们在 Linux 系统中执行定时任务,还有很多其他有周期任务需求的系统中也都支持 Cron 语法,比如我前面写过的[[GithubActions入门]],如果你想定时执行你的 Github Action 就可以使用 Cron。