Linux Shell命令——crontab

2014/04/01 - BJ

linux中经常会遇到需要定期定时执行某些任务,这个时候就需要crontab这个命令,设置周期性被执行的指令,指令会被记录在/var/spool/cron/中。

crontab是后台执行命令,一般系统都已经开启,不需要我们再启动和关闭。

crontab语法介绍

crontab后面跟三个常用的参数:

  • -e:编辑定时任务
  • -l:列出当前定时任务
  • -r:删除当前定时任务

crontab格式

格式:f1 f2 f3 f4 f5 program

其中,f1表示分钟(0-59),f2表示小时(0-23),f3表示日期(1-31),f4表示月份(1-12),f5表示星期(0-7),program表示需要执行的指令(最好使用绝对路径)

下面以f1为例,列举常用的写法:

  • * : 表示每分钟都执行
  • a-b : 表示第a分钟到第b分钟执行
  • a,b,c... : 表示第a,b,c,...分钟要执行
  • */n : 表示每n分钟个时间间隔执行一次

输出配置

>符号定义输出,表示重定向。

&是"等同于"的意思

在使用crontab的时候,通常不需要将输出信息或者错误信息打印出来,所以通常配合下面的两个符号使用

>/dev/numm 将输出重定向到空文件

2>&1 1是标准输出stdout,2是标准错误stderr,意思是2的输出重定向于1

深入了解

上面介绍的crontab是在用户权限下为用户需要制定的定时任务,crontab是如何执行系统中的定时任务呢,比如updatedb任务?

首先,系统的定时任务是放在/etc/crontab中,只能以root身份编辑。cron进程(负责执行定时任务的进程)每分钟会读取一次/etc/crontab中的任务来执行。

我们可以打开/etc/crontab看一下,执行语句是这样写的:

01 \* \* \* \* root run-parts /etc/cron.hourly

root 指定身份,用root身份去执行后面的命令

run-parts 命令是script指令,将后面目录内所有的script文档捉出来执行

这样就很清楚了,如果我们想添加系统执行的定时任务,只需要写个script脚本,放在(例如)/etc/cron.hourly路径下,就会每个小时执行一次。

注意事项

  • 如果将crontab中的任务误删了,可以从$HOME路径下找到备份,拷贝到/var/spool/cron/路径下
  • 任务很多的时候,需要注意资源分配不均的问题,可以将时间错开
  • 最好取消不必要的输出
  • 安全检查防木马,可以去/var/log/cron中查看是否有额外的任务
  • 周与日、月不能同时存在