介绍

crond 和crontab是不可分割的。crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。crond是它的守护进程。cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务。

安装与测试

  1. 安装crontabs服务并设置开机自启动
yum install crontabs
systemctl enable crond
systemctl start crond
  1. 配置定时规则
vim /etc/crontab

配置文件中设置要执行的脚本

# 将当前时间写入到log文件,每分钟执行一次
* * * * * root echo `date` >> /root/date.log
  1. 使配置文件生效
crontab /etc/crontab
  1. 查看任务
crontab -l

常用命令

systemctl start crond   # 启动
systemctl stop crond    # 停止
systemctl restart crond # 重启
systemctl reload crond  # 重新加载配置
systemctl status crond  # 查看服务状态
crontab -u # 设定某个用户的cron服务
crontab -l # 列出某个用户cron服务的详细内容
crontab -r # 删除某个用户的cron服务
crontab -e # 编辑某个用户的cron服务
crontab -i # 打印提示,输入yes等确认信息

常用路径

/var/spool/cron/root (以用户命名的文件) 所有默认存放定时任务的文件,
/etc/cron.deny 文件中所列出用户不允许使用crontab命令
/etc/cron.allow 文件中所列出用户允许使用crontab命令,且优先级高于/etc/cron.deny

/var/log/croncron服务的日志,可以用tail -f /var/log/cron.log观察
/var/spool/mail/root 文件中,有crontab执行日志的记录,用tail -f /var/spool/mail/root 即可查看最近的crontab执行情况

定时任务的格式

  • 定时任务文件内容如下
SHELL=/bin/bash
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
  • 用户的定时任务分6段,分别是:分,时,日,月,周,命令

  • *表示任意时间都,实际上就是“每”的意思。可以代表00-23小时或者00-12每月或者00-59分

  • -表示区间,是一个范围,00 17-19 * * * cmd,就是每天17,18,19点的整点执行命令

  • ,是分割时段,30 3,19,21 * * * cmd,就是每天凌晨3和晚上19,21点的半点时刻执行命令

  • /n表示分割,可以看成除法,*/5 * * * * cmd,每隔五分钟执行一次

示例

  • 每晚21:30重启tomcat30 21 * * * root systemctl restart tomcat

  • 每天18 : 00至23 : 00之间每隔30分钟重启tomcat 0,30 18-23 * * * root systemctl restart tomcat

  • 每2个月15天(约75天)更新一次域名证书 * * */75 * * certbot --nginx certonly -n -d domain