您的位置:首页 > 其它

Crond定时任务详细分析

2015-08-09 21:50 323 查看
有时候我经常在想,这生活真的很奇怪。每天都必须要吃饭(一日三餐),睡觉(休息),每周都要有双休,每个月都要拿工资,每年呢都有节假日过生日等等。但是生活中有太多的事情要被记住,如果linux系统能够每天10点或10点半发消息提醒我们需要休息,或者每年家人过生日前一天发邮件提醒我们。日历上记录。备忘录。那么linux是怎样来进行任务调度呢?那就我们接下来看看linux下的任务调度吧1. 工作调度的种类:cron、at和anacron、
at:at可以处理和执行一次性任务调度的命令(不深究)anacron与anacrontab(秒级任务-适用于需要关闭的服务器,常用在以天单位或者开机之后执行任务) crontab:crontab设置的任务将会一直循环的执行下去(适用于7*24小时不关机的服务)2. Crond介绍
2.0 cron、crond、crontab区别





2.1什么是Crond定时任务 Cron是linux中定期执行命令或者指定程序任务的一种服务或软件
2.2为什么需要crond定时任务为了满足日常生活中的一些任务需要被定期执行。例如:定期清理过期的临时的日志文件;定期的进行时间校准;定期的进行分类旧数据和新数据;定期的数据备份等等。因此,crond系统服务就因此诞生了2.3crond定时任务的分类 2.3.1系统的定时任务:系统定时执行的任务或者工作。例如:系统日志的轮替,系统数据的备份,清理系统的缓存等等在后面会一一说明。(注:以下格式中星期域的0和7都表示星期天)
系统定时任务写进crontab文件的任务格式(0-6段):




2.3.2用户的定时任务:用户定时执行的任务或者工作。例如:用户管理的网站时间校准,用户数据库备份,用户网站数据备份等等
用户定时任务的任务格式(0-7段):



3. Crontab文件和Crontab命令
3.1 Crontab文件
Crondtab文件中包含交给cron守护进程的一系列的作业和指令;每个用户都拥有自己的crontab 文 件(通常存放在/etc或/etc子目录下,只能由系统管理员修改) 拓展:守护进程:linux后台服务进程,生存期较长的进程,在系统引导装入时启动,在系统关闭时终止。 3.2 Crontab命令
3.2.1 使用权:root(系统定时任务),crontab文件的所有者(用户定时任务)
3.2.2 Crontab命令
语法: crontab [-u user] file crontab [-u user] [-l | -r | -e] [-i] [-s]说明: 用户可以拥有独立的crontab文件, -u user 指定用户
任务文件:
文件说明
/etc/cron.deny该文件中所列用户不允许crontab
/etc/cron.all该文件中所列用户允许crontab优先级别高于/etc/cron.dey
/var/spool/cron该目录存放所有用户的crontab配置文件并且以用户名命名
命令参数:
参数
含义
用法
-l查看crontab内容
crontab –l 回车
-r
清除crontab所有内容,并且删除文件
crontab –r 回车
-e
编辑crontab内容
crontab –e 回车
-i
删除crontab所有内容并且删除文件,但有提示问是否要删除
crontab –ri 回车
-u user
指定用户
Crontab –u root -l
4. 怎样使用crond定时任务
4.1 Crond定时任务的规范化
4.1.1最好添加注释(在工作中添加注释,方便自己和其他人维护管理)
[root@ex /]#crontab -l
#look at 00:00every day
0 0 * * * /bin/ls
#print "helloworld!" at 1 o'clock every day
0 1 * * */bin/ echo"hello word!"

4.1.1 定时任务中的命令和文件一定要使用绝对路径(如果不使用绝对路径,经常会出现各种错误)
4.1.2 一条定时任务包含多条命令最好使用脚本形式
4.1.3 定时任务要先测试在写入文件
4.1.4 定时任务最好不要打印出执行信息,在后面加上>/dev/null 2>&1(如果不加容易导致硬盘inode被占用,系统服务不正常)
拓展:/dev/null为特殊字符设备,即黑洞设备 >或1> 输出重定向 >>或1>> 追加重定向 <或<0 输入重定向 <<或<<0输入追加重定向 2>错误重定向,即错误信息重定向 2>>错误追加重定向 2>&1将标准错误重定向到标准输出(>&) 0 标准输入 1 标准输出 2标准错误输出 >/dev/null 2>&1 等价于 1>/dev/null 且2>/dev/null 4.2 调试crond定时任务的方法
4.2.1 加快定时任务执行的时间,例如:每分钟执行一次
4.2.2 调整系统的时间让其接近定时任务规定的时间(至少要5分钟)
习题:
1. 每晚的21:30重启mysql
2. 每月1、10、22日的4:45重启mysql
3. 每周六、周日的1:10重启mysql
4. 每天18:00至23:00之间每隔30分钟重启mysql
5. 每月的4号与每周一到周三的11点重启mysql

常见错误:
1.绝对路径没加:
#错误例子
#print date to/tmp/test.txt
*/1 * * * * /bin/echo`date` >> test.txt
[root@ex tmp]#tail -f /tmp/test.txt #监控文件变化
tail: cannot open`/tmp/test.txt' for reading: No such file or directory
tail: no filesremaining
#正确例子
#print date to/tmp/test.txt
*/1 * * * * /bin/echo`date` >> /tmp/test.txt
[root@ex ~]# tail-f /tmp/test.txt
Sun Aug 9 03:02:35CST 2015
Sun Aug 9 03:03:01CST 2015
Sun Aug 9 03:04:01CST 2015
Sun Aug 9 03:05:02CST 2015
……
2.命令行使用%要加反斜线\转义
#错误例子
#将日期(年月日)追加重定向到/tmp/test.txt中
* */1 * * */bin/echo `date +%Y%m%d` >> /tmp/test.txt
#正确例子     $()=``
* */1 * * */bin/echo $(date +%Y%m%d) >> /tmp/test.txt
* */1 * * */bin/echo `date +\%Y\%m\%d` >> /tmp/test.txt
3.日和星期之间组合使用
#错误例子
59 1 1-7 8 0 /bin/echo`date +\%Y\%m\%d` >> /tmp/test.txt
#分析:初看以为是8月的第一个星期天将日期写进test.txt
#其实是第三个域和第五个域是或操作。即:8月的1-7第一个星期日写入文件,以及8月的剩下的日期
#也写入文件。
#正确例子
59 1 1-7 8 *test `date +\%w` = 0 && /bin/echo `date +\%Y\%m\%d` >>/tmp/test.txt
拓展:test 命令最短的定义可能是评估一个表达式;如果条件为真,则返回一个 0 值。如果表达式不为真,则返回一个大于 0 的值 — 也可以将其称为假值。
4.分位和时位
#print date to/tmp/test.txt
0 */1 * * */bin/echo `date` >> /tmp/test.txt   #每小时
* */1 * * */bin/echo `date` >> /tmp/test.txt              #每分钟
*/1 * * * * /bin/echo`date` >> /tmp/test.txt              #每分钟
这篇博文我总结了一晚上加一个白天,才弄好,还得努力啊,总结初衷是51cto韩艳威老师的指导,怎么说呢!是教会了我学习方法与提高自己的途径吧!这是韩老师的博客[b]http://hanyanwei.blog.51cto.com/。总之,[/b]提高在于练习和思考并且去自己查找答案最后我想对自己提一个要求,绝不做伸手党!!!

本文出自 “开源是精神,分享是美德” 博客,请务必保留此出处http://hongtengfei.blog.51cto.com/9881650/1683153
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: