基本使用

cron 来自希腊单词 chronos(意为「时间」)

crontab [-u user] file

crontab [-u user] [-i] { -e | -l | -r }
                    |     |    |    |
                    |     |    |    ---------  delete user's crontab
                    |     |    --------------  list user's crontab
                    |     -------------------  edit user's crontab
                    -------------------------  prompt before deleting user's crontab

查看运行的 cron 作业:

$ crontab -l

编辑 cron 作业配置:

$ crontab -e

时间格式

50 19 * * * sh hello.sh >> out.txt
 |  | | | |
 |  | | | -------------------------------------- day of week (0 ~ 7)
 |  | | ---------------------------------------- month (1 ~ 12)
 |  | ------------------------------------------ day of month (1 ~ 31)
 |  -------------------------------------------- hour (0 ~ 23)
 ----------------------------------------------- minute (0 ~ 59)

符号规则:

  • *:匹配所有值
  • ,:或者,枚举
  • -:区间,范围
  • /:增量值,间隔

示例:

  1. 默认间隔:

     # 每分钟执行一次 Command(每月的每周的每天的每小数的每分钟)
     * * * * * Command
    
  2. 枚举:

     # 每小时的 0,15,30,45 分钟的时候执行 Command
     0,15,30,45 * * * * Command
    
  3. 范围:

     # 在 6 点到 18 点的 0,15,30,45 分钟的时候执行 Command
     0,15,30,45 6-18 * * * Command
    
  4. 间隔:

     # 每隔两天在 6 点到 18 点的 0,15,30,45 分钟的时候执行 Command
     0,15,30,45 6-18 */2 * * Command
    
     # 每小时执行一次 Command
     * */1 * * * Command
    

cron 配置

主配置文件

直接修改/etc/crontab文件:

# 使用的 shell 环境
SHELL=/bin/bash
# 引入执行命令路径
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# cron 任务的输出被邮寄给 MAILTO 变量定义的用户名
# root 用户可以查看 /var/spool/mail/root
MAILTO=root
# MAILTO 为空,电子邮寄不会被寄出
# MAILTO=""
# 设置执行命令或脚本是使用的主目录
HOME=/

# 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

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

如果在/etc/crontab文件中配置了run-parts部分,可以在对应的目录下添加脚本来实现定时的运行

/etc/cron.d

可以在 /etc/cron.d 目录下添加不同的文件定义任务

用户配置

使用crontab -e命令,编辑的是/var/spool/cron下对应用户的 cron 文件

管理 cron 服务

启动 / 停止 / 重启 crontab

$ /etc/init.d/crond start
$ /etc/init.d/crond stop
$ /etc/init.d/crond restart

查看日志

$ tail -f /var/log/cron

重启后执行

@reboot /path/to/job
@reboot /path/to/shell.script
@reboot /path/to/command

注意事项

  1. 环境变量:在 crontab 文件中指定任务运行所需的环境变量,使用全局路径

  2. 邮件日志:任务调度执行完毕,系统会将任务输出信息通过电子邮件的形式发送给但其系统用户,可以忽略不重要的输出

     * */1 * * * Command >/dev/null 2>&1
    
  3. %%在 crontab 中表示换行,使用是需要转义

  4. cron 文件的注释符号是#