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