crontab定时任务

定时任务的使用场景非常多的, 比如清理日志, 定时发送消息等. 一般web框架也附带相关的定时任务功能, 不过我还是偏向使用linux自带定时任务组件crond, 简单易用, 不涉及编程语言

crond配置很丰富, 这里以CentOS7为准, 只说明常见的配置方式.

首先我们需要确认系统是否运行crond

systemctl start crond

如果没有, 使用yum安装

yum install crond
# 启动
systemctl start crond
# 设置开机启动
systemctl enable crond

直接配置管理文件(不推荐)

 vi /etc/crontab

简单说明下配置文件

SHELL=/bin/bash: 以bash方式执行命令
PATH=/sbin:/bin:/usr/sbin:/usr/bin: 执行命令所配置的PATH变量
MAILTO=root: 任务执行后给root发系统通知邮件, 经测试并未在/var/mail/root中收到, 可能我本机邮件系统未正确配置

cronr任务配置语法以及配置范围

分     小时     日     月    星期    用户     命令
0-59  0-23   1-31   1-12   0-6    root    command

这种方式将所有用户的定时任务写在了一起, 不便于管理, 如果该文件为root所有, 那么其他用户只能通过root账户编辑

在指定用户的配置文件中编辑

这里也分为两种情况

  1. 直接编辑
crontab -e

即在当前的用户下编辑定时任务, 此时我们不在需再指定哪个用户来执行, 配置如下:

# 每分钟执行一次 ls
* * * * * ls
  1. 编辑/var/spool/cron/root文件, 这里以root用户为例

其实和上面的方法是一样的效果, 所以这里如果我们需要查看定时任务, 则可以使用

crontab -l -u root

cat /var/spool/cron/root

查看定时任务的执行情况

由于我没有验证系统mail, 所以这里只介绍查看crond日志方式

tail -f /var/log/cron | grep root 

这里以root用户为例, 如果查看其它用户的, 自行做相应的修改

最后, 列举几个常见的定时任务例子

# 每30分钟执行ls
*/30 * * * * ls

# 每天5:30执行ls
30 5 * * * ls

# 每个月的1号, 10号和20号凌晨执行ls
0 0 1,10,20 * *  ls

# 每周一到周五凌晨执行ls
0 0 * * 1-5 ls

# 0到12点, 每隔2小时执行ls
0 0-12/2 * * * ls
展示评论