Linux crontab 命令
-
介绍
crontab
命令用于设置周期性被执行的指令,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
Linux下的任务调度分为两类,系统任务调度(配置文件为:/etc/crontab)和用户任务调度,此处主要介绍用户任务调度。 -
检查cron服务
- 检查crontab工具是否安装 :
crontab -l
- 检查crond服务是否启动 :
service crond status
- 检查crontab工具是否安装 :
-
安装cron
- yum install vixie-cron
- yum install crontabs
-
服务说明
- 启动服务:/sbin/service crond start
- 关闭服务:/sbin/service crond stop
- 重启服务:/sbin/service crond restart
- 重新载入配置:/sbin/service crond reload
- 查看crontab服务状态:service crond status
- 手动启动crontab服务:service crond start
- 查看crontab服务是否已设置为开机启动,执行命令:ntsysv
- 加入开机自动启动:chkconfig –level 35 crond on
-
相关文件介绍
- /var/spool/cron/{userName} : 代表用户crontab文件
- /etc/crontab : 代表系统crontab文件
- /var/log/cron : 保存cron的任务执行记录
- /var/spool/mail/{userName} : 记录用户邮件日志(定时任务执行后会发送邮件给配置的用户)
-
crontab指令语法介绍(主要用于操作用户crontab文件,位于:/var/spool/cron目录下,文件名与用户名一样,执行-e时自动创建,执行-r时,自动删除该文件)
- crontab [-u user] file (以文件方式提交定时任务)
- -u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
- file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
- crontab [-u user] [ -e | -l | -r ]
- -e (edit user’s crontab),编辑用户crontab文件
- -l (list user’s crontab),列出用户crontab文件中的cronjob(要执行的定时任务)
- -r (delete user’s crontab),删除用户crontab文件(删除定时任务)
- -i (prompt before deleting user’s crontab),删除用户crontab前给与相应提示
- crontab [-u user] file (以文件方式提交定时任务)
-
crontab 文件内容格式介绍(配置定时任务)
当用户执行crontab -e 时,将编辑用户crontab文件,文件每一行内容代表一个定时任务,他们都有统一的格式:* * * * * comand(*以空格或tab隔开)
-
第一个* : 分钟(0–59)
-
第二个* : 小时(0–23)
-
第三个* : 日期(0–31)
-
第四个* : 月份(1–12)
-
第五个* : 星期0–7(0或者7表示星期天)
-
comand : 要执行的操作
-
* * * * * - - - - - | | | | | | | | | +----- 星期中星期几 (0 - 6) (星期天 为0) | | | +---------- 月份 (1 - 12) | | +--------------- 一个月中的第几天 (1 - 31) | +-------------------- 小时 (0 - 23) +------------------------- 分钟 (0 - 59)
-
特殊字符:
- 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
- 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
- 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
- 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
-
- 举例:
- 每晚21:30重启apache:
30 21 * * * service httpd restart
- 每月1、10、22日的4:45重启apache :
45 4 1,10,22 * * service httpd restart
- 每月1到10日的4:45重启apache :
45 4 1-10 * * service httpd restart
- 每隔两分钟重启apache :
*/2 * * * * service httpd restart
或者1-59/2 * * * * service httpd restart
- 每晚11点到早上7点间,每隔1小时重启apache :
0 23-7/1 * * * service httpd restart
- 每晚18:00至23:00,每隔30分钟重启apache :
0,30 18-23 * * * service httpd restart
或0-59/30 18-23 * * * service httpd restart
- 使用者也可以将所有的设定先存放在文件中,用 crontab file 的方式来设定执行时间。
- 每晚21:30重启apache:
- 在线计算工具
-
注意事项:
- 当任务在你所指定的时间执行后,系统会寄一封信给你,显示该任务执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上
> /dev/null 2>&1
即可。如20 03 ** * . /etc/profile;/bin/sh /var/www/runoob/test.sh > /dev/null 2>&1
- %在crontab中被认为是newline,要用\来escape才行。比如crontab执行行中,如果有
"date +%Y%m%d"
,必须替换为:"date +\%Y\%m\%d"
。 - 通过crontab 文件名 方式提交任务时,该文件的一个副本将被放在/var/spool/cron目录中,文件名就是用户名
- 当设置完用的的定时任务后建议执行:
crontab -l > 文件名
,将用户的crontab进行备份,防止意外执行crontab -r 删除掉用户的crontab后可通过备份文件恢复用户的定时任务(执行:crontab 文件名),或者一开始便通过文件的方式提交定时任务。 - 新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。
- 当任务在你所指定的时间执行后,系统会寄一封信给你,显示该任务执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上
-
小结 :
- * :表示任何时候匹配
- 可以用
A,B,C
表示A或者B或者C时执行命令 - 可以用
A-B
表示A到B之间时执行命令 - 可以用
/A
表示每A分钟(小时等)执行一次命令