linux系统定时任务

linux系统crond的定时任务

1、linux系统自身定期执行的任务工作:系统周期性自行执行的任务工作,如轮询系统日志、备份系统数据、清理系统缓存等,这些任务无需我们人为干预。

2、用户执行的任务工作:某个用户或系统管理员定期要做的任务工作,例如每隔5分钟和互联网上时间服务器进行时间同步,每天晚上0点备份网站站点数据及数据库数据,一般这些工作需要每个用户自行设置才行。

例如:服务器时间同步

[root@redhat~]#  crontab  -l

3、指令选项说明含义表

-l:查看crontab文件内容。提示:l可理解为list的缩写。

-e:编辑crontab文件内容,提示:e可理解为edit的缩写。

-i:删除crontab文件内容,删除前会提示确认。用的很少。

-u  user:指定使用的用户执行任务。

特别强调:-i,-r参数在生产中很少用,没什么需求必须要用-e进去编辑即可

补充:crontab{-l | -e}实际上就是在操作 /var/spool/cron/ 当前用户这样的文件

4、crontab语法格式中时间段含义

段                 含义                 取值范围(整数)

第一段          代表分钟              00-59

第二段          代表小时              00-23

第三段          代表日,天          00-31

第四段          代表月份              00-59

第五段          代表星期,周几    0-7(0和7都代表星期日)

5、crontab语法格式中特殊符号含义

*:*号,表示任意时间都,实际就是“每”的意思。例如:00  23  *  *  *  cmd 表示每月每周每日的 23:00 都执行 cmd 任务。需要注意的是:每个时间位上的 * 表示每,如果位上是 * 就是该位上时间的取值范围,例如:小时上的 * 等价于 00-23。

经验技巧:定时任务规则如果到小时,口述时就最多提每天。

分位上的 * 就等价于 0-59,表示每分。

 

-:减号,表示分隔符,表示一个时间范围,区间段,如 17-19 点,每天的 17,18,19 的 00 分执行任务。00  17-19  * * * cmd。就是 17,18,19 点整点分别执行的意思。

 

,:逗号,表示分隔时段的意思。30  17,18,19  * * * /bin/sh /scripts/xxx.sh 表示每天 17、18和19 点的半点时刻执行 /scripts/xxx.sh 脚本。也可以和 “-” 结合使用,例如:30  3-5,17-19 * * * /bin/sh /scripts/xxx.sh

 

/n:n代表数字,即“每隔n单位时间”,例如:每10分钟执行一次任务可以写成 */10 * * * * cmd,其中, */10,* 的范围是 0-59,因此,也可以写成 0-59/10

 

工作中调试时任务的方法:

1、增加执行任务频率调试任务

     每分钟或者系统时间之后5分钟执行,看看结果对不对

     某些任务不能用于生产环境没有测试机会

     代码、配置变更发布流程:个人开发环境——办公测试环境——IDC机房测试环境——IDC正式环境(分组,灰度发布)

2、调整系统时间调试任务(不能直接用于生产环境),保持5分钟

3、通过脚本日志输出调试定时任务

4、注意一些任务命令带来的问题

例如:

标准输出多了

*/1  *  *  *  *  echo  "=="  >>  /tmp/xxx.log  >/dev/null  2>&1

百分号转义(脚本无需转义)      

*/1  *  *  *  *  tar  zcf  /tmp/xxx_$(date  +%F).tar.gz  /etc/hosts  > /tmp/xxx.log

5、注意:环境变量导致的定时任务故障(java)

6、通过crond定时任务服务日志调试定时任务(/var/log/cron)

7、sh  -x  调试脚本

企业生产环境案例:linux定时任务生产java服务无法执行问题案例

http://blog.51cto.com/oldboy/1541515

 

crontab生产问题案例及解决过程

面试题:在系统维护的时候,创建文件提示“NO  space  left  on  device”,请问你这是什么故障?

解答:磁盘空间block满了或者inode被占满了

 

企业案例:inode被填满

问题:服务器上发生了“NO  space  left  on  device”,df  -h发现没满,为什么?

centos5  sendmail 临时队列目录  /var/spool/clientmqueue

centos6  postfix 临时队列目录  /var/spool/postfix/maildrop/

默认定时任务执行时会给root发邮件,如果邮件服务不开,就会把邮件堆到上述目录

当定时任务结尾不加 >/dev/null  2>&1 的时候,定时任务就会把上述目录填充大量小文件

postfix关闭:/etc/init.d/postfix  stop

 

例题:

1、在每周6的凌晨3:15执行/home/shell/collect.pl,并将标准输出和标准错误输出到/dev/null设备,请写出crontab中的语句

15  03  *  *  6  /usr/bin/perl  /home/shell/collect.pl  >/dev/null  2>&1

chmod  +x  /home/shell/collect.pl

15  03  *  *  6  /home/shell/collect.pl  >/dev/null  2>&1

2、crontab在11月份内,每天的早上6点到12点中,每隔2小时执行一次/usr/bin/httpd.sh怎么实现

00  06-12/2  *  /bin/sh  /usr/bin/httpd.sh  >/dev/null  2>&1

3、网站访问慢的案例

linux  java/http/php中某一个进程占用CPU很高

解决案例:

top  -p  32311

strace  -p  32311

案例文档:

http://blog.linuxxeye.com/343.html

http://www.tuicool.com/articles/YFVbia

http://blog.sina.com.cn/s/blog  48eef8410101fl4p.html

 

 

 

posted @ 2018-09-10 17:52  axzq  阅读(336)  评论(0编辑  收藏  举报