Crontab 是 Linux 平台下的一款用于循环执行例行任务的工具,Linux 系统由 cron (crond) 这个系统服务来控制任务 , Linux系统本来就有很多的计划任务需要启动 , 所以这个系统服务是默认开机启动的 。 Linux 为使用者提供的计划任务的命令就是 Crontab
Crontab 是 Linux 下用来周期性执行任务或者等待处理某些事情的时候
Crontab 配置文件Crontab 的周期性任务主要分为两种:系统任务 / 用户任务
系统任务就是系统周期性需要执行的任务,比如说定时执行缓存清理任务,记录日志等等。系统任务的配置文件在 /etc/crontab
这里是 crontab 的配置文件中的内容
SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
前面 4 行用于配置 cron 的环境变量,环境变量的配置不在这里讨论了,之后的内容是 crontab 的用法的一些简单的解释
用户的周期性任务就可以使用 crontab 工具,所有用户制定的 crontab 计划任务都被保存在 /var/spool/cron 中,文件名即用户名
Crontab 文件的含义在上面的crontab文件中已经包含了一部分的解释,这里我将其翻译为中文
SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # 详细的解释可以查看 man 手册 # 举例: # .---------------- 分 (0 - 59) # | .------------- 时 (0 - 23) # | | .---------- 日期(每月) (1 - 31) # | | | .------- 月 (1 - 12) 也可以使用月的英文,例如 jan,feb,mar,apr ... # | | | | .---- 日期(每周) (0 - 6) (周日即是 0 也是 7 )也可以使用sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * 想要执行命令的用户(这个参数可以为空) 你想要执行的命令
Crontab 一共包含包括 7 个字段,前五个字段是关于设置执行周期的,第六个字段用于指定你想要执行的命令的用户,第七个字段是要执行的命令
在前5个字段中,还可以使用以下的特殊字符
星号 (*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号 (,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠 (-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
相关的权限文件
/etc/cron.deny 该文件中所列的用户不允许使用 crontab 命令
/etc/cron.allow 该文件中所列的用户允许使用 crontab 命令
/var/spool/cron/ 所有用户 crontab 文件存放的目录,文件名即用户名
Crontab 服务安装 Crontab 服务
CentOS 7.x
yum install crontabs
Fedora 23+
dnf install crontabs
在大多数 Linux 发行版中已经自带的 Crontab ,依旧写一下安装方法
启用服务
systemctl start crond
停止服务
systemctl stop crond
查看服务状态
systemctl status crond
加入开机启动
systemctl enable crond
取消开机启动
systemctl disable crond
命令格式详解Usage: crontab [options] file crontab [options] crontab -n [hostname] Options: -u <user> define user //设定某个用户的crontab服务,例如,“-u user1”表示设定 user1 用户的 crontab 服务,此参数一般由root用户来运行 -e edit user's crontab //编辑 crontab 文件内容。如果不指定用户,则表示编辑当前用户的crontab文件 -l list user's crontab //显示 crontab 文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容 -r delete user's crontab //删除某个用户的 crontab 文件,如果不指定用户,则默认删除当前用户的crontab文件,此动作一般由 root 来执行 -i prompt before deleting //在删除用户的crontab文件时给确认提示 -n <host> set host in cluster to run users' crontabs //这个选项只有才 cron(8) 才启用,可以根据已经创建好了的配置文件来指定得对于一个集群来执行任务 -c get host in cluster to run users' crontabs //这个选项只有才 cron(8) 才启用,可以查看集群目前的状态,需要和 -n 协同使用 -s selinux context //selinux 相关选项 -x <mask> enable debugging //开启调试
使用方法输入 crontab -e 并回车即可开始编辑当前用户的 crontab 文件,编辑完成保存之后文件立即生效