Linux系统中的计划任务、周期性任务的服务是cron,主程序包为cronie,cronie提供了crond守护进程及相关辅助工具:crontab。

cron任务分类两类

  • 系统cron任务:主要用于系统自身的维护(比如写缓存数据到硬盘、日志清理等),手动编辑/etc/crontab维护,一般不建议修改。
  • 用户cron任务:使用crontab命令维护。

crontab是系统管理员用来维护计划任务的主要工具,本文主要介绍crontab的使用。

cron任务配置格式

crontab的配置格式可以参考/etc/crontab

[root@VM_41_201_centos ~]# cat /etc/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

这是系统任务,一般不要修改,用户的cron任务会保存在/var/spool/cron/<username>中,如root用户的cron任务:/var/spool/cron/root

特殊说明:* 位置除了可以指定单一值,还可以指定多个值

星号(*):代表所有可能的值; 
逗号(,):多个值,如 “* * * * 6,7” 表示每周六、日;
中杠(-):整数范围,如“2-6”表示“2,3,4,5,6” ;
斜线(/):时间间隔,如 “*/5 * * * *” 表示每5分钟。

crontab命令

SYNOPSIS

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

OPTIONS

# 常用选项
-u user  指定哪个用的任务(默认当前用户)
-l  查看任务
-e  编辑任务(进入vim编辑器,并且能够编辑已有的任务)
-r  清空任务(如需删除单条或部分任务,需要使用-e命令进入vim编辑)

示例

# 每个整点时刻查询磁盘分区使用情况写入文件
0 * * * * df -h >> /data/diskinfo
# 每天凌晨3点执行shell脚本
0 3 * * * /root/sh/mysql-backup.sh