shell脚本,每次读取文件的一行,逐行读取并做显示处理,如需其它处理,自行修改即可。
写法一:
写法二:
介绍—http 400错误.
您的Web服务器认为客户端发送的数据流 (例如您的浏览器或我们的 CheckUpDown 机器人 ) 是 ‘ 畸形的’,即没有完全遵守 HTTP 协议。 因此您的 Web 服务器无法理解和处理该请求。
该错误几乎总是意味着客户端系统以及 / 或者您的Web服务器编程失败。
HTTP 循环中的 400 错误
任何客户端 ( 例如您的浏览器或我们的 CheckUpDown 机器人 ) ,都需要通过以下循环:
从您站点的 IP 名称 ( 即您站点的网址-URL, 不带起始的 ‘http://’) 获得一个 IP 地址。这个对应关系 ( 即由 IP 名称向 IP 地址转换的对应关系 ) 由域名服务器 (DNSs) 提供。
打开一个 IP 套接字 (socket) 连接到该 IP 地址。
通过该套接字写 HTTP 数据流。
从您的Web服务器接受响应的 HTTP 数据流。该数据流包括状态编码, 其值取决于 HTTP 协议 。 解析该数据流得到 状态编码和其他有用信息。
该错误在以上所述的最后一步生成,即当客户端收到 HTTP 状态编码并识别其为 ‘ 400’ 时
解决 400 错误 – 一般方法
在客户端或是Web服务器,或者两端都存在一个低层程序漏洞 (bug) 。 如果您无法进入这些系统的源程序, 您唯一能做的是把该问题提交给开发这些系统的公司的技术支持人员。
dig命令是一个用于询问 DNS 域名服务器的灵活的工具。
它执行 DNS 搜索,显示从受请求的域名服务器返回的答复。
多数 DNS 管理 员利用 dig 作为 DNS 问题的故障诊断,因为它灵活性好、易用、输出清晰。
在 unix 和 linux 下,建议大家使用 dig 命令来代替 nslookup。 dig 命令的功能比 nslookup 强大很多,不像 nslookkup 还得 set 来 set 去的,怪麻烦的。
下面是 dig 的一些比较常用的命令:
# dig 最基本的用法
dig @server sina.com.cn.
在使用终端时,由于经常需要切换到其它机器,导致不清楚现在到底在哪台机器,所以希望能在命令行处显示本机IP。
只要做如下处理即可:
编辑/home/username/.bashrc, 即~/.bashrc,加入以下一行。
显示效果:
如果在crontab里有个定时任务设置为一分钟执行一次,但是它执行的时间可能会超过一分钟,此时crontab一分钟后会再次运行该脚本,这样就会出现冲突,如果程序不做容错处理,可能会导致出现一些问题。如果想解决这个问题,可以用Linux中的进程锁控制crontab执行的并发问题。
给一个shell脚本加锁,使用flock命令。
一般格式:
flock [-sxun][-w #] fd#
flock [-sxon][-w #] file [-c] command…
常用选项:
-s, –shared :获得一个共享的锁。
-x, –exclusive :获得一个独占的锁。
-u, –unlock :移除一个锁,通常是不需要的,脚本执行完后会自动丢弃锁。
-n, –nonblock :如果没有立即获得锁直接失败而不是等待。
-w, –timeout :如果没有立即获得锁就等待指定的时间。
-o, –close :在运行命令前关闭文件的描述符。用于如果命令产生子进程时会不受锁的管控。
-c, –command :在shell中运行一个单独的命令。
-h, –help :显示帮助。
-V, –version :显示版本。
目前有一个需求,其它20台机器上每隔5分钟向另外一台服务器提交一些文件的MD5信息,这台服务器每隔几分钟跑一个脚本,把这些信息进行对比,如果有不一致的信息需要报警。
现在的问题就是,系统自带的crontab定时只能每几分钟跑一次,这样每次脚本跑的时候都是在某分的第一秒。
但是,如果在服务器提交信息的时候去进行比对信息,就可能发生异常了,所以需要把服务器上检查的脚本推迟一些运行,不要也是在1秒时候跑。
crontab不支持,但是脚本支持延迟啊,所以,解决办法很简单。在检查脚本里开头 sleep 10s 即可啦。这样这个脚本在1秒时开始执行,但是sleep一会后才继续后边检查,所以,不会发生冲突了~~
sleep用法Tips
sleep 1 睡眠1秒<br /> sleep 1s 睡眠1秒<br /> sleep 1m 睡眠1分<br /> sleep 1h 睡眠1小时<br /> echo `expr $RANDOM % 60` 睡眠随机0-60秒