crontab简介

crontab主要用于须要管理周期执行定时任务的场景

crontab安装

(有些系统默认早已带了crontab,无需安装的同学可以直接跳过本节)

安装:

yum install -y vixie-cron
yum install -y crontabs

启动:

systemctl start crond.service

重启:

systemctlrestartcrond.service

设置开机启动:

systemctl enable crondservice

命令格式

crontab主要有以下几种命令格式

crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i] [-s]
crontab -n [ hostname ]
crontab -c

我们发觉crontab的命令还挺多的,我们先从最常用的开始:

crontab-e

这个命令用于编辑定时任务列表,当我们输入完命令,按下回车键以后,它会使用默认编辑器(一般是vi/vim)打开一个文件,上面的内容可能是这样子的:

命令英文_命令方块指令_linux crontab命令

这很可能是你看见的,在设置任何定时任务之前,这儿是看不到任何内容的,假如你早已设置了内容的话,这么听到的可能是这样的

linux crontab命令_命令方块指令_命令英文

这是我提早设置好的定时任务,我们暂时不解释这个配置的功能,但从这儿可以晓得,通过crontab-e我们可以编辑定时任务。

假如我们哪些都不做,直接退出编辑器会看见以下提示:

假如我们更改了这个文件,例如降低了一个任务

命令英文_命令方块指令_linux crontab命令

保存退出以后,我们可以看见成功的提示:

假如说linux操作系统怎么样,我们的配置有误,这么系统都会提示我们,重新编辑,你可以输入y重新编辑或则n舍弃刚才的配置的内容

命令英文_linux crontab命令_命令方块指令

crontab-l

这个命令可以列举当前的定时任务内容,这与我们使用crontab-e听到的内容一样,不同的是crontab-e可以编辑,而这儿只能查看

crontab-r

这个命令用于删掉任务列表上面的内容(在删掉之前我们先做一个备份)

linux crontab命令_命令英文_命令方块指令

通过前面的示例可以看出linux设置环境变量,执行完crontab-r以后,我们的任务列表被清空了

crontabfile

这个命令用于将保存在某个文件中的任务列表中的内容覆盖到我们的任务列表中linux crontab命令,我们刚才在删掉任务列表前做了备份

现今来看一下,使用命令能够将任务列表还原回来

linux crontab命令_命令方块指令_命令英文

可以看见,通过crontabfile命令,我们将刚才备份的文件内容恢复到任务列表当中了。

有两点须要注意:

crontab-ri

这个命令用于删掉任务列表上面的内容,但会在删掉之前让你确认是否删掉

你可以输入y确认删掉,也可以输入n取消此次操作

crontab-uuser_name

这儿我们补充一点,Linux中的每位用户都可以有自己的定时任务,她们设置的任务被保存在/var/spool/cron/目录下的同名文件中

linux crontab命令_命令方块指令_命令英文

这个命令跟-i一样,须要与其它命令配合使用

crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i] [-s]

不使用-u时默认的就是当前用户,假如你要配置其它用户的任务列表

就可以使用这个命令

crontab -u user -e

其实,使用这个命令的前提是要有对应文件的操作权限,大多数情况下,这个命令都是root在用。

须要注意的是,按照文档提示,假如你从一个普通用户su到其它用户,在进行crontab命令时,就一定要加上-u选项。但我实验发觉,su到其它用户以后,再进行crontab操作,默认使用的su以后的用户。

任务列表的句型

接这部份是最重要的任务规则配置环节

linux crontab命令_命令方块指令_命令英文

前面这个截图是/etc/crontab文件的内容,使用crontab-e编辑的句型也这个基本一样,差距只有user-name一项。

使用crontab-e无需指定用户名称,由于这个命令就是使用用户自己的身分来执行的。

补充:/etc/crontab中的内容只能由root来设置linux crontab命令,通常用于设置系统级的周期任务

从前面的图上面可以晓得,周期任务的配置句型由两部份组成(使用contab-e时忽视user-name)

时间规则

后面5个*分别代表分、时、日、月、周

不仅里面的配置方法之外,crontab还支持更灵活的配置形式:

注意,上述符号中的非标准符号不一定能在你的机器上正常运行,在使用前一定要先进行测试

命令

可以是shell命令或则执行某个早已写好的脚本

实例

以下举几个实例的事例

# 表示每分钟执行一次
* * * * * cmd
# 每个小时的0分和30分执行各执行一次
0,30 * * * * * cmd
# 每天的2点到5点每个小时的整点执行
0 2-5 * * * cmd
# 每年的 1月1日0点执行
0 0 1 1 * cmd
# 每天的12点到18点每隔3小时执行一次
0 12-18/3 * * * cmd
# 每个月最后的天的22点整执行(非标准语法,要先进行测试再投入生产环境)
0 22 L * * cmd

cron.allow与cron.deny

执行cron任务的权限是可以通过/etc/cron.allow和/etc/cron.deny两个文件进行配置。

这两个文件的内容为每一行一个用户名,或则为空

当上述两个文件都不存在时,一个普通使用执行crontab命令会得到以下错误

环境变量

在实际使用过程中,我们还会编辑好一个.sh文件,设置好权限(通常是降低执行权限chmod+xtask.sh)

测试成功以后,兴高采烈地把它添加到crontab的任务列表上面,结果迟迟没有得到预期结果。

我之前遇到这样的情况,直接执行脚本没问题,但使用crontab执行却报错,查看日志发觉是环境变量的问题。

解决的办法很简单,只要在脚本内提早导出环境变量即可:

执行结果保存

设置完任务列表以后,我们最关心的主是任务的执行情况

可以在配置任务的时侯,在最后加入以下将执行过程中输出的内容保存到自己想要的地方。

*/5 * * * * cmd > /var/log/cron_task.log 2>&1 &

句型解析详见crontab脚本错误日志和正确的输出写入到文件

日志文件

我们可以查看/var/log/cron文件的内容来查看服务器执行了什么任务

(我的是CentOS,假如是Ubuntu可以到/var/log/cron.log查看)

待补充

以下几点是我看了文档然后还不太明白的几点(主要还是英语水平还不够。。)

以上所有内容是结合自己的实践与官方文档加上网友们的文章写成,还有好多自己不理解的,希望见到的同事假如有晓得的也评论告诉我哦,感谢啦

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复