squid问题-域名解析

03 Nov 2009 Posted in  squid

今天有老客户下单修改源IP地址1.2.3.4为1.2.3.7,一切正常操作过后进行测试,其中有台机器就是狂报404。
在用/home/squid/bin/squidclient -p 80 -m PURGE http://测试url
命令清除缓存,甚至重启dns/squid服务后,其测试访问的first-to-parent地址还是1.2.3.4!! 继续阅读……


修改dbname常见的一个错误NID-00135及解决…

03 Nov 2009 Posted in  database

oracle自带有nid用以修改dbname。查看其命令语法如下表所示: 继续阅读……


sed使用

03 Nov 2009 Posted in  bash

shell这东西,只有活逼到手头上了,才知道应该去学什么。
比如有客户要求修改/home/squid/share/errors/Simplify_Chinese/里所有的错误页面转向到他们自己专用的界面去,七八个节点,几十台服务器,几百个文件,一个一个vi编辑,多可怕。只好现学现卖sed,目前发现两种办法: 继续阅读……


expect脚本——批量修改ssh配置

03 Nov 2009 Posted in  bash

公司服务器一般通过ssh进行远程管理。以前大家登录的时候,都是随意选内外网IP进入。王总接手后,说这事隐患太大了,必须禁了外网ssh。第一思路,用iptables把外网ssh的包DROP掉;第二思路,用tcpwrapper把sshd的allow写死;第三思路,修改sshd_config,只监听内网请求。 继续阅读……


expect日志分析

03 Nov 2009 Posted in  bash

接着上次expect脚本那事儿往下走。
由于不同服务的管理方法不同,上次关闭了ssh的外网登录以后,各地不断有服务器报出这样那样的问题。主管一发狠:“全面检查!”
在检查中,还真发现不少问题。最突出的就是很多本应该上传到中心服务器的日志居然一直留在本机没动弹!时不时发作出来,就撑爆了根分区——这当然有分区规划不合理的问题。但在线业务,磁盘划分修改起来就不是那么方便了。于是退而求其次,定期监控日志文件大小吧。这回expect只要du
-sh一下就行了,方便的很。问题在下一步的分析。
摘举exp.log中一次循环的执行结果如下:
bash The authenticity of host '1.2.3.4 (1.2.3.4)' can't be established. RSA key fingerprint is bb:d5:81:e1:84:09:c5:32:f6:fb:e1:b3:d3:de:c3:53. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '1.2.3.4' (RSA) to the list of known hosts. root@1.2.3.4's password: 4.0K /home/apache2/logs/access_log
第一步,是用如下脚本,可以做到提取日志达到50M大小的服务器IP。
bash #!/bin/bash nk=`sed -n -e "/50M/=" exp.log` nnk=`expr $nk - 1` sed -n "$nnk"p"" exp.log|awk -F"'" '{print $1}'|awk -F"@" '{print $2}'
但问题是:如果同时有两台到50M呢?或者在运行到它时,已经到50M以上呢?
于是我想,以ls -sh显示大小,人眼好看,电脑不好认啊。如果用du -b,那大小相同的几率就应该小很多很多了。然后定一个阀值,进行比较循环就可以了。
最后脚本如下:
bash #!/bin/bash for ip in `cat ip.lst` do ./ssh.exp $ip > /dev/null 2&>1 done bs=400 size=`grep access exp.log | awk '{if ($1>'"$bs"'){print $1}}'` for so in $size do nk=`sed -n -e "/$so/=" exp.log` nnk=`expr $nk - 1` sed -n "$nnk"p"" exp.log | awk -F"'" '{print $1}'|awk -F@ '{print $2}' done
#本来想用sed ‘N;s/n//g’ exp.log来合并行尾,省得调行号,但exp日志的格式因为ssh登录的提示信息不一而无法统一,只能放弃。
试验性的在ip.lst中输入了15个IP,运行结果显示出来了两个。成功。 继续阅读……


awk变量$0妙用

03 Nov 2009 Posted in  bash

接着说上篇的脚本。
因为看awk看的入迷,边想把exp.log的处理那段都用awk写出来。惊喜的发现awk有个内置参数NR,而且awk内部也可以进行运算。
于是上次的脚本就改成了这个样子:
bash #!/bin/bash for ip in `cat ip.lst` do ./ssh.exp $ip > /dev/null 2&>1 done NK=`awk 'BEGIN{bs=4000000}/access/{if($1>bs){nk=NR-1;print nk}}' exp.log` for nnk in $NK do awk -F"[@|']" 'NR=='"$nnk"' {print $2}' exp.log done
然后又发现awk中$0的鬼怪。于是进一步简化成了这个样子:
bash #!/bin/bash for ip in `cat ip.lst` do ./ssh.exp $ip > /dev/null 2&>1 done awk 'BEGIN{bs=4000000}/access/{if($1>bs)print x};{x=$0}' exp.log|awk -F"[@|']" '{print $2}'
终于算是圆了自己用一句话搞定它的梦。yeah~
不过对这个原理还是不很明白。因为print x;x=$0出来是上一行,但print $0则是本行。why?
网上对打印前一行还提出另一个写法,就看的更莫名其妙了:
bash awk '/regex/{print (x==""?"":x)};{x=$0}' $1
而打印后一行是这样:
bash awk '/regex/{getline;print}' $1
不过这毕竟是恰好上下行而已,如果是要前几行的,还是要靠NR运算了。 继续阅读……


squid 自动配置脚本

03 Nov 2009 Posted in  devops

公司刚重新规定了squid服务的标准配置。以后,客户的配置要求,统一安排。这样,除了一些有特殊要求(比如加密/防盗链等)的以外,普通客户就可以逐步实现简洁明了的规范化自动化配置。 继续阅读……