1.4- 定时任务总结之九句箴言
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.4- 定时任务总结之九句箴言相关的知识,希望对你有一定的参考价值。
1.4
定时任务之九句箴言
九句箴言---- 不会九句箴言别做运维
1.定时任务规则之前加注释
2.使用脚本代替命令行制定定时任务
3.定时任务中date命令%的特殊含义
定时任务中,%表示回车 -----可以使用\转义
4.运行脚本一定要用/bin/sh或sh
脚本不必须有x权限
5.定时任务中-命令或脚本的输出结果(正确或错误)
定向到黑洞(>/dev/null 2>&1)
或追加到文件中(>>/tmp/oldboy.txt 2>&1)
6.避免不必要的程序及命令输出
tar zcvf ×××××
tar zcf √√√√√
7.打包压缩使用相对路径
8.定时任务脚本中的程序文件,尽量使用绝对路径
用户的定时任务中--------默认存放在当前用户的家目录
系统的定时任务-----------存放在根目录下
9.系统与命令位置有关的环境变量问题
linux定时任务生产java服务无法执行问题群友案例
定时任务运行脚本的时候 PATH只认识很少的几个路径 /usr/bin /bin
解决: 方法1.使用命令的绝对路径
方法2.PATH在脚本的开头重新定义一下
Java方面使用绝对路径麻烦,用此方法(Tomcat)
第1章 箴言5:定制任务执行的结果定向到文件或黑洞中
追加到文件
#backup etc/services to /tmp by oldboy
#00 */2 * * * /bin/sh /server/scripts/bak-services.sh >>/tmp/back-services.log 2>&1
追加到空洞 正确的或错误的
#backup /var/www/html to back-html.sh
* * * * * /bin/sh /server/scripts/bak-html.sh >>/dev/null 2>&1
1.1 企业案例:定时任务中 命令或脚本的结果 没有定向到黑洞或文件中
1.邮件的软件(Postfix)没有开启
inode满了--------大量小文件堆积在/var/spool/postfix/maildrop/
2.邮件软件开启 -------不会导致inode满了
邮件文件很大----------you have new mail in /var/spool/mail/root
1.1.1 工作中postfix软件不会运行
postfix 开启: 邮件存放位置------/var/spool/main/root
关闭: 邮件存放在临时目录----/var/spool/postfix/maildrop/
1.2 回顾:创建/删除大量小文件
同时创建大量小文件 --千万别直接ls --ls \wc -l
[[email protected] oldboy]# touch {1..450000}.txt
-bash: /bin/touch: Argument list too long
[[email protected] oldboy]# echo {1..450000}.txt|xargs touch
同时删除大量小文件 1.交给管道 加rm
2. 还删不了 -缩小范围一点一点分类删除
[[email protected] oldboy]# #ls 1*.txt|xargs rm 方法一
[[email protected] oldboy]# #ls 2*.txt|xargs rm
[[email protected] oldboy]# ls *.txt|xargs -n数字 rm 方法二
3.或删除目录 --删之前 记好目录的权限和所有者
实例1-1 每天凌晨1点把/etc/目录 打包备份/tmp目录并且要求每天的备份名字不同。
###第1个里程碑-命令 cd到上级目录 && tar 相对路径
[[email protected] /]# cd / && tar zcf /tmp/etc-$(date +%F).tar.gz etc/
[[email protected] /]# ls -l /tmp/etc-2018-01-04.tar.gz
-rw-r--r-- 1 root root 9775655 Jan 4 09:31 /tmp/etc-2018-01-04.tar.gz
第二个里程碑--命令放入脚本中
[[email protected] scripts]# echo 'cd / && tar zcf etc.$(date +%F).tar.gz etc' >>/server/scripts/etc_bak.sh
[[email protected] scripts]# cat /server/scripts/etc_bak.sh
cd / && tar zcf etc.$(date +%F).tar.gz etc
[[email protected] /]# sh /server/scripts/etc_bak.sh
[[email protected] /]# ls / |grep “etc.2018*”
etc.2018-01-04.tar.gz
第三个里程碑--书写定时任务
[[email protected] /]# vim /var/spool/cron/root
#backup etc and different time
* * * * * /bin/sh /server/scripts/etc_bak.sh >>/tmp/time.log 2>&1
第四个里程碑--检查
tail -f /var/log/cron 查看定时任务日志的实时更新
ll / |grep “etc.2018*” 查看效果
第五个里程碑---确认无误,按规定创建定时任务
00 1 * * * /bin/sh /server/scripts/etc_bak.sh >>/tmp/time.log 2>&1
第2章 箴言6尽量避免一些不必要输出
zcvf(不要)----zcf 不要显示过程
显示过程,乱,烦
第3章 箴言8定时任务脚本中的程序文件,尽量使用绝对路径
用户的定时任务中--------默认存放在当前用户的家目录
系统的定时任务-----------存放在根目录下
第4章 箴言9系统与命令位置有关的环境变量问题
linux定时任务生产java服务无法执行问题群友案例
定时任务运行脚本的时候 PATH只认识很少的几个路径 /usr/bin /bin
解决: 方法1.使用命令的绝对路径
方法2.PATH在脚本的开头重新定义一下
Java方面使用绝对路径麻烦,用此方法(Tomcat)
4.1 每分钟显示当前系统的时间年-月-日和系统的ip地址,追加到 /tmp/ip.log 中
第一个里程碑 ----在命令行中执行命令
[[email protected] oldboy]# date +%F && ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}'
2018-01-04
10.0.0.201
第二个里程碑-----把命令复制粘贴到脚本中 --并执行脚本测试
[[email protected] oldboy]# sh /server/scripts/print-ip.sh
2018-01-04
10.0.0.201
第三个里程碑----制定定时任务------先每分钟执行一次,测试是否正确
crontab -e 写定时任务
crontab -l 查看定时任务
#pritn ip and date 加上注释,以后查看方便
* * * * * /bin/sh /server/scripts/print-ip.sh >>/tmp/ip.log 2>&1 追加到文件中
第四个里程碑----查看效果 ---看定时任务日志文件 看效果
[[email protected] ~]# cat /tmp/ip.log
/server/scripts/print-ip.sh: line 1: ifconfig: command not found 报错
2018-01-04
4.1.1 原因: 定时任务运行脚本的时候 PATH只认识很少的几个路径 /usr/bin /bin
ifconfig 命令 在/sbin中
命令行--OK 脚本--OK 定时任务--NO
4.1.2 解决:方法1.脚本中使用命令的绝对路径
date +%F && /sbin/ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}'
方法2.PATH在脚本的开头重新定义一下
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[[email protected] oldboy]# vim /server/scripts/print-ip.sh
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
date +%F && ifconfig eth0|awk -F "[ :]+" 'NR==2{print $4}'
[[email protected] ~]# tail -f /tmp/ip.log
2018-01-04
10.0.0.201
了解:有时候必须使用方法二:tomcat
重启resin的脚本(Java编写)
使用export重新声明PATH变量
总结:
1.定时任务一些注意事项
00 00 * * * 表示半夜12点/0点
00 07 * * * 表示7点整
00 23,00-07 * * * 表示晚上23点一直到第二天早上7点
创建定时任务一步一步来,多复制粘贴
将定时任务的输出结果重定向到文件/黑洞
2.故障排查
查看日志 /var/log/cron
检查结果 是否得到你想要的内容
改为每分钟运行
修改系统时间 --提前几分钟
3.定时任务流程:
相关命令在命令行执行查看效果
无误后复制粘贴进脚本
/bin/sh 执行脚本查看效果
确认无误后复制粘贴到定时任务配置文件(/)
时间先设置每分钟执行一次,查看定时任务的效果
确认无误后修改定时任务规定时间
扩展:
运行脚本显示执行过程
/bin/sh -x 一个+号表示执行了一次 直接显示到屏幕上的,没有+号
[[email protected] tmp]# /bin/sh -x /server/scripts/print-ip.sh
+ export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
+ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
+ date +%F
2018-01-04
+ awk -F '[ :]+' 'NR==2{print $4}'
+ ifconfig eth0
10.0.0.201
第四关练习(定时任务部分)
实例4-1 每隔2个小时将/etc/services文件打包备份到/tmp下。
命令:
[[email protected] ~]# cd / && tar zcf /tmp/services.$(date +%F_%H).tar.gz etc/services
[[email protected] /]# ls /tmp/services.$(date +%F_%H).tar.gz
/tmp/services.2018-01-04_11.tar.gz
写脚本
[[email protected] /]# cat /server/scripts/bak-services.sh
cd / && tar zcf /tmp/services.$(date +%F_%H).tar.gz etc/services
划任务
[[email protected] /]# crontab -l |tail -3
#backup etc/services to /tmp by oldboy
* * * * * /bin/sh /server/scripts/bak-services.sh >>/tmp/back-services.log 2>&1
检查
[[email protected] ~]# ll /tmp |grep "services.2018*"
-rw-r--r--. 1 root root 127314 Jan 4 11:39 services.2018-01-04_11.tar.gz
最后把定时任务设置成规定时间
[[email protected] ~]# crontab -l |tail -2
#backup etc/services to /tmp by oldboy
00 */2 * * * /bin/sh /server/scripts/bak-services.sh >>/tmp/back-services.log 2>&1
实例4-2 .每天晚上 12 点,打包站点目录/var/www/html 备份到/data 目录下(最好每次备份按时间生成不同的备份包)
命令:
[[email protected] /]# cd / && tar zcf /data/bak-html$(date +%F) var/www/html
[[email protected] /]# ls /data |grep "bak-html$(date +%F)"
bak-html2018-01-04
脚本:
[[email protected] /]# cat /server/scripts/bak-html.sh
cd / && tar zcf /data/bak-html$(date +%F) var/www/html
[[email protected] /]# /bin/sh /server/scripts/bak-html.sh
定时任务:
[[email protected] /]# crontab -l |tail -3
#backup /var/www/html to back-html.sh
* * * * * /bin/sh /server/scripts/bak-html.sh >>/dev/null 2>&1
检查:
[[email protected] /]# ls -l /data |grep "bak-html$(date +%F)"
-rw-r--r--. 1 root root 117 Jan 4 12:15 bak-html2018-01-04
检查无误修改定时计划为规定时间
[[email protected] /]# crontab -l |tail -3
#backup /var/www/html to back-html.sh
00 00 * * * /bin/sh /server/scripts/bak-html.sh >>/dev/null 2>&1
文件
/etc/sysctl.conf 系统的内核配置文件
/etc/rc.local 开机自启动的软件,命令
以上是关于1.4- 定时任务总结之九句箴言的主要内容,如果未能解决你的问题,请参考以下文章