crontab设置定时任务

  • Post author:
  • Post category:linux
  • Post comments:1评论

一、crontab介绍

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

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

以上引用于维基百科,那么crontab就是一个可以按照你的要求定时运行一些Linux命令的工具,最小单位是一分钟,接下来我来说一下它的用法。

二、crontab安装

一般情况下,常见的Linux操作系统都已经预装了crontab,并且默认已设置开机自启,如果你的系统尚未安装,可以使用以下命令安装:

Ubuntu / Debian:

apt install cron

CentOS:

yum install cronie

启动crontab服务

必须要启动crontab服务器才能使定时任务生效,以下是各系统的启动方法,以及设置开机自启。

Ubuntu 14 / Debian 7:

service cron start
chkconfig cron on

Ubuntu 16+ / Debian 8+:

systemctl start cron
systemctl enable cron

CentOS 6:

service crond start
chkconfig crond on

CentOS 7+:

systemctl start crond
systemctl enable crond

三、crontab配置文件

crontab使用配置文件来配置定时任务,每行代表一个定时任务,可以配置多行,即多个定时任务。

使用crontab命令打开该配置文件:

crontab -e

如果系统中包含多个编辑文件的软件,可能会询问你使用哪个软件进行编辑,也有可能默认直接使用vim编辑,选择你会使用的软件即可,这里我选择了vim.basic。

如果你还不会在Linux上编辑文件的话,可以看vim使用教程

选择编辑器

打开配置文件,我们可以看见官方留下的注释(也有可能没有注释),和大多数配置文件一样,井号(#)开头的行是注释,不会被当做配置内容读取,在文件最后一行另起一行,即可配置新的定时任务。

配置文件

四、定时任务设置

在配置文件末尾另起一行即可配置定时任务,如图所示,配置完成后,需要保存文件才会使配置生效。

编辑配置文件
* * * * * echo "Hello World!!!" >> /root/hello-crontab

这个定时任务的效果就是:每分钟向 /root/hello-crontab 文件输出一行“Hello World!!!”文字。

保存并退出编辑配置文件后,可看到已创建新的定时任务的提示,然后等待至下一分钟的第0秒,就可以看到 /root/ 目录下多出了一个 hello-crontab 文件,查看该文件的内容,即可看到命令输出的内容。以下图片显示的是15分钟后的文件内容。

定时任务

定时任务配置语法

我们来看上面的第一个示例,左边有五个星号(*),以空格分隔,右边则是一条完整的Linux命令。

* * * * * echo "Hello World!!!" >> /root/hello-crontab

一行配置共包含6个域,分别用空格分隔,前5个域都是时间域,用来设置定时任务的执行时间,其分别是:分钟域 小时域 日期域 月份域 星期域。第6个域则是后面所有的内容,代表要定时执行的命令,只能写一行,不能写多行。

每个时间域的语法如下:

  • 具体的数值,代表一个确定的分钟、小时、日期等等
  • 逗号分隔的数值,例如“1,2,3,4,5”
  • 连词符(-)指定一个范围,例如:“1-5”,等同于“1,2,3,4,5”
  • 星号(*)代表任意一个合法的值,例如在分钟域里表示“每分钟”,在小时域则表示“每小时”
  • 斜线(/)操作符,代表间隔多长时间,例如,“*/10”在分钟域里代表每隔10分钟,等同于“0,10,20,30,40,50”

注意事项

  • 在星期域里,0和7都代表星期天
  • 如果星期域和日期域都被设置(即都不是星号(*)),那么这两者只要有一个条件满足就会执行定时任务

以下举一些例子:

# 星期一至星期五的8点至17点,每20分钟重启一次v2ray
*/20 8-17 * * 1-5 systemctl restart v2ray

# 每天凌晨4点30分重启一次系统
30 4 * * * reboot

# 每个月1号至20号或者星期六星期天的凌晨四点执行 /root/update.sh 脚本
0 4 1-20 * 0,6 bash /root/update.sh

# 每分钟输出一行 “Hello” 至 /root/hello 文件中
* * * * * echo "Hello" >> /root/hello

常见错误

  • 对分钟的设置错误,例如原本想设置每隔两个小时执行一次,设置成了* */2 * * *,实际上的效果是每偶数小时的每分钟执行一次,即在0、2、4 … 22点的每分钟执行一次,正确的设置应该是0 */2 * * *

五、总结

以上则是crontab常用的功能,熟练运用即可设置任何想要的时间来执行你想要定期运行的命令、脚本等,而不需要手工登录Linux去运行,希望这篇文章可以帮到你。

这篇文章有一个评论

  1. 头像
    vsisi

    不错不错,学习了,google搜索到你家的,收藏了,希望多一点好文,会经常过来学习。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据