跳到主要内容

crontab

先来说下场景,需要写一个爬虫,定时从某个接口地址获取数据,然后存入本地数据库。

因此就需要一个可定时执行的东西,之前在 the5fire 的知识体系中除了可以在数据库中定时执行某个存储过程或者 sql 语句,如何在系统中定时执行某个任务还没有概念。

于是,请教了同事。知道在 ubuntu 中,准确的说是在 linux 中,有这么东西——crontab,专门用来定制执行任务。简单解说一番,就会用了。

虽然这个东西比较简单,但为了保证知识体系的完整,还是要查查 crontab 是个什么。

crontab 单词的意思是:定时任务。

看看百科定义[完整定义 ]:

crontab 命令常见于 Unix 和类 Unix 的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρόνος),原意是时间。

通常,crontab 储存的指令被守护进程激活, crond 常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为 cron jobs。

有了上面的概念,再来看 crontab 的使用就会清晰些。

既然是系统每分钟都要检查一下,那么必然要有一个检查的依据,如配置文件或者什么的。

还是来看看百科:

crontab 文件包含送交 cron 守护进程的一系列作业和指令。每个用户可以拥有自己的 crontab 文件;同时,操作系统保存一个针对整个系统的 crontab 文件,该文件通常存放于/etc 或者/etc 之下的子目录中,而这个文件只能由系统管理员来修改。

crontab 文件的每一行均遵守特定的格式,由空格或 tab 分隔为数个领域,每个领域可以放置单一或多个数值。

好了,开始使用了。估计有些人从定义就知道他要怎么用了。不过我还是想记录下。

使用步骤:

1、终端运行 crontab -e [解释:编辑配置文件]

2、选择你要用的编辑器,一般人会选择 vi。

3、此时配置文件已打开,只需要按照他的格式写配置即可。

好吧,简单到我都觉得。。

举个例子:

在我的 home 目录下有一个 python 脚本,helloworld.py

#coding:utf-8

print 'hello world by crontab!'

我想要这个脚本在每天的早上 7 点 30 执行。

因此这个 任务的 crontab 配置文件就是:

m h dom mon dow command

30 7 * * * python /home/the5fire/testcrontab.py >> /home/the5fire/testcrontab.log 2>&1

简单解释下,这个配置的意思就是在每天的 7:30 用 python 运行我的家目录下的 testcrontab.py 文件,并将输出内容输出到 testcrontab.log 中,后面那个 2>&1 的意思是把错误的输出也输出到标准输出(2 表示错误,2>表示错误输出,&表示等同于,1 表示正确),因此如果运行出错也会把错误输出到之前定义的 log 中。

另外关于合适执行命令还有些要说。

上面只是定时几点执行,那么我怎么设置它按照某一频率执行。比如每分钟执行依次。

对应的配置就是

m h dom mon dow command

_/1 _ * * * python /home/the5fire/testcrontab.py >> /home/the5fire/testcrontab.log 2>&1

再来一个场景,我想在每天的早上六点到八点之间,每隔 3 分钟执行一次的配置怎么写:

m h dom mon dow command

_/3 6-8 _ * * python /home/the5fire/testcrontab.py >> /home/the5fire/testcrontab.log 2>&1

到此应该都会使用了吧,五个星号表示不同的执行单位(分、时、日、月、年),而那个反斜线表示频率。

方便的管理方式

npm i -g crontab-ui

crontab-ui

参考