提及计划任务,相信你们都应该听过,其实就是给个人计算机设置定时任务,指定时间内去执行相应的操做。linux
熟悉windows的朋友都知道,windows下有一项系统功能叫计划任务程序,咱们能够经过界面设定在Windows环境下的计划任务。数据库
今天咱们不谈Windows,重点在Linux服务器上。Windows和Linux在应用过程当中最大的区别,在于Windows是更加贴近于用户的,而Linux主要负责管理服务器的工做。相对来讲,Linux对计划任务的要求应该更为多一些。apache
例如,咱们须要每分钟执行一次程序,检查系统运行状态,每星期要进行日志备份,每个月要进行数据库的备份。诸如此类大量频繁的任务依靠人来作确实不太现实。windows
如何在Linux中使用计划任务呢?这里就要用到Linux下的工具Crontab。服务器
首先这里咱们须要记住两个概念:周期性执行的任务咱们称为CronJob,周期性执行的任务列表咱们称为Crontable。
ide
环境:VMware10,Linux版本型号CentOS6.5。远程工具 X_Shell5
工具
首先,安装并检查Crontab工具ui
安装:url
- yum install vixie-cron - yum install crontabs
检查:spa
- crontab -l #检查Crontab工具是否安装 - service crond status #检查crond服务是否启动 - service crond #查询crond服务可使用的命令
在一些版本的Linux中,Crontab工具是默认安装的(固然,这与你安装Linux时选择哪一种安装也是有关系的,最小系统安装默认不会安装该工具),若是没有的话,搭建yum源本地安装便可。
接下来,这里咱们先给一个小案例。
案例一:
每分钟都打印当前时间到一个日志文件中
*********date >> /tmp/log.txt
- crontab -e #打开计划任务
#写入
*/1 * * * * date >> /tmp/log.txt
# 保存退出
- crontab -l #打印计划任务
- tail -f /tmp/log.txt #动态刷新log.txt文件的最后一行
上面的案例给出的是最简单的计划任务,每分钟将时间打印到/tmp/log.txt中。能够发现,Crontab工具使用起来并非至关复杂。
接下来,咱们聊一聊Crontab的基本组成。
Linux下一切皆文件。CROND 是一项系统服务,每分钟都会从配置文件刷新定时任务,并执行计划任务,它是以文件的形式设定定时任务。咱们上面使用到的Crontab工具,是用来对定时任务进行调整。
关于它的配置文件,也就是咱们上面案例中写到的【*/1 * * * * date >> /tmp/log.txt】,有着必定的格式要求。
咱们再给出几组例子,帮助理解格式
* 天天10:30重启apache服务
30 10 * * * service httpd restart
* 每个月一、十、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
* 每奇数分钟重启apache服务
1-59/2 * * * * service httpd restart
* 晚上11点到早上7点之间,每隔一小时重启apache
0 23-7/1 * * * service httpd restart
* 天天18点到23点之间每隔30分钟重启apache
0-59/30 18-23 * * * service httpd restart 0,30 18-23 * * * service httpd restart
有特别注意:
一、Crontab共有秒,分钟,小时,天,月,星期 五个域,出第三域和第五域之间执行的是“或”操做,其他都执行的是“与”操做。
二、命令行双引号中使用%时,须要加反斜线 \
案例二:
计划任务:四月的第一个星期天早晨1时59分运行a.sh
错误命令:
59 1 1-7 4 0 /root/a.sh
执行结果:四月的1-7号和四月的每一个周天的1:59都执行该命令
修 正:
59 1 1-7 4 * test `date +\%w` -eq 0 && /root/a.sh
关于Crontab工具的使用,咱们只须要掌握一条命令加四个选项就足够。
[root@localhost ~]# crontab --help crontab: invalid option -- '-' crontab: usage error: unrecognized option usage:crontab [-u user] file crontab [-u user] [ -e | -l | -r ] (default operation is replace, per 1003.2) -e (edit user's crontab) -l (list user's crontab) -r (delete user's crontab) -i (prompt before deleting user's crontab) -s (selinux context)
-u:指定计划任务分配的用户,默认是当前登陆用户
-e:编辑计划任务
-l:列出用户的计划任务
-r:删除用户的计划任务
细心的话能够注意到这里有-u选项,代表咱们能够指定计划任务的全部者。
案例三:
多用户同时设定定时任务
这就是Crontab工具的一些基本功能,关于Crontab,还有很重要的一点,它的配置文件。
在 /etc 目录下:
[root@localhost ~]# cd /etc [root@localhost etc]# ls cron* cron.deny crontab cron.d: 0hourly raid-check sysstat cron.daily: cups logrotate makewhatis.cron mlocate.cron prelink readahead.cron tmpwatch cron.hourly: 0anacron cron.monthly: readahead-monthly.cron cron.weekly:
-1>打开文件 crontab<这是Crontab的全局配置文件>
在该全局的配置文件中也能够添加新的系统级别的计划任务。(须要指定用户)
- */1 * * * * root echo “root->cron/crontab”
MAILTO表示的是计划任务改变以后生成日志的发送对象。
-2>进入配置文件cron.d
- cd cron.d - ls - cat sysstat
crontab 在载入配置文件的过程当中,会把sysstat文件中的配置信息载入成root用户的计划任务。
但crontab -e 修改内容,不会改变sysstat配置文件中的信息。直接修改sysstat配置文件中的信息,不会直接载入到crontab中,可使用命令
crontab sysstat
将配置文件中的内容导入crontab中。这会覆盖原来crontab -e中的所有内容
-3>
/etc/cron.d/sysstat 文件中有注明的用户名,在目录 /etc/cron.d 下的全部文件,均可以认为是系统配置文件的补充。
也能够在该目录下本身建立文件,写相应的计划任务,一样须要注明用户。不须要载入,就能够执行该计划,并且该计划并无放到 crontab -l -u user中。所以说明,crontab工具不能够编辑系统级别的计划任务。
-4>补充
crontab -e写入的定时任务,以及crontab -l列出的定时任务,保存在文件 /var/spool/mail/”user”文件中.不一样用户对应不一样的子文件夹
cat /var/spool/mail/root
----------------------------------------------------------------------------------------------
Crontab到这里基本已经结束了,这里还有最后一个问题。
Crontab最小只能设置到每分钟执行一次命令,若是想半分钟执行某个命令怎么作的?
Linux下有条系统命令 sleep,可让程序中止一段时间,如何经过这条系统命令实现小于一分钟的定时任务呢?
案例四:
计划任务:每半分钟执行一次 将date打印到/tmp/date.log
执行命令:
*/1 * * * * date >> /tmp/date.log */1 * * * * sleep 30s;date >> /tmp/date.log
-------muhuizz整理