最近服务器总是莫明奇妙的网络不通。我在上一篇文章里写了一个自动检测网卡状态的脚本:http://blog.haohtml.com/archives/11827.但发现服务器仍然出现此问题.但服务器内部运行正常.这里基本可以确认是与外网不通的原因.就写了一个脚本,用来检测网络状态,在不通的情况就重启服务器了.此解决办法相当的变态.最好不要使用. 1.创建新文件 /data/check_net_status.sh,内容如下 #!/bin/bash if [ $# -ne 1 ] then echo 'ip address not defined!' exit fi ip=$1 log_file="$(date +%Y%m%d).log" ret=`ping -c 10 $ip | grep ttl | wc -l` if [ $ret -lt 2 ]; then echo "$(date +%H:%M:%S) ===== reboot" >> $log_file shutdown -r now fi 添加执行权限 chmod +x /data/check_net_status.sh 2.创建定时检测shell脚本,实现5分钟自动检查是否与网关的连接状态,如果不通,则自动重启本服务器. 编辑/etc/crontab文件在现有行 [...]
Browsing the archives for the shell tag
默认系统环境安装教程:http://blog.haohtml.com/archives/6051 php-fpm.conf: 想自己搞一个自动修改php-fpm.conf的shell脚本.刚安装的php,默认的是nobody用户运行的,这里修改为了www,并去掉了两边的注释符 sed '63,66s/<!--\|-->//g' php-fpm.conf | sed 's/nobody/www/g' 上面将"<!--"和"-->"两个字符串全部删除了.多个之间用"\|"符号隔开 s前面的63,66为处理的行号,如果为一行的话,直接指定一个行号就可以了.这里使用了从63行到66行中间的数据,包括这两行. nginx.conf 下面的命令是用来配置nginx.conf文件的 sed '2s/nobody/www/' /usr/local/nginx/conf/nginx.conf.default | sed '2s/#//g'| sed '64,71s/#//g' | sed '64,71s/scripts/usr\/local\/nginx\/html/' > /usr/local/nginx/conf/nginx.conf 这里先将第二行的nobdy用www替换掉,再将前面的#删除,再将支持php配置的第64行和71前面的#删除,并将默认的php脚本路径改为/usr/local/nginx/html位置. 对于sek的使用方法见:http://blog.haohtml.com/tag/sed 这里没有使用awk命令,对于此命令的介绍见:http://blog.haohtml.com/tag/awk
实现原理,利用 cron来定时执行一个shell脚本,如果发现服务器不通或者上次故障后恢复正常,则发送邮件.否则不用发送邮件. 目前此Shell在FreeBSD和Linux下均可以正常运行. ping.sh #!/bin/bash if [ $# -ne 1 ] then echo 'must have one param,must be ip address format!' exit fi ip=$1 tmpfile=/tmp/$ip.txt if [ -f $tmpfile ]; then lastmsg=`cat $tmpfile` else lastmsg='YES' fi ret=`ping -c 3 $ip | grep ttl | wc -l` if [ $ret -lt 2 ]; then echo 'NO' > [...]
这个脚本特别的简单的,一次只能检测一个ip地址,可以放在crontab里定时检测.可以用来检测服务器状态情况.特别的实用的,如果有多个ip地址的话,可能必定一下,循环一下就可以了. 只有当不通或者宕机后恢复正常的时候才发送指定消息. #!/bin/bash if [ $# -ne 1 ] then echo 'must have one params ip address format!' exit fi ip=$1 tmpfile=$ip.txt if [ -f $tmpfile ]; then lastmsg=`cat $tmpfile` else lastmsg='YES' fi ret=`ping -c 3 $ip | grep ttl | wc -l` if [ $ret -lt 2 ]; then echo 'NO' > $tmpfile echo [...]
下面的shell 可不可以详细解释一下呀? (ls you no 2>&1;ls yes 2>&1) 2>&1|egrep \* >file (ls you no 2>&1;ls yes 2>&1)|egrep \* >file (ls you no;ls yes) 2>&1|egrep \* >file 2>&1又是什么意思呀?? ======================================= shell上: 0表示标准输入 1表示标准输出 2表示标准错误输出 2>&1意思是:把 标准错误输出 重定向到 标准输出. >代表输出重定向 |:是管道,例子: cmd1 | cmd2 意思是:命令cmd1的标准输出座位cmd2的标准输入. 详细解释第三个命令行,(ls you no;ls yes) 2>&1|egrep \* >file: 2>&1意思是:把 标准错误输出 重定向到 标准输出. |意思是:管道; egrep [...]
陈皓 概述 —— 什么是makefile?或许很多Winodws的程序员都不 知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要 懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不 自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。 因为,makefile 关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文 件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执 行操作系统的命令。
FreeBSD下默认的shell为CSH,可以通过命令 echo $SHELL 来查看系统默认的shell是哪一个的。 想知道FreeBSD都支持哪些shell,可以用下面的命令进行查看的 #cat /etc/shells 默认只支持 /bin/sh /bin/csh /bin/tcsh 这三种shell的,平时我们经常用bash 来写shell脚本,特别是对于那些从linux转过来的用户来说,bash可能说无所不在的.但freebsd默认情况下并不支持bash的,我们可以手动安装一下bash的,命令如下:
摘自:UNIX Shell编程24学时编程 10.1.2 使用test 更常见的情况是,提供给if语句的清单是一个或更多个test命令,它们通过调用test命令而被激活,语法如下: test expression 这里,expression为test命令构造的表达式,该表达式的构造使用了特殊选项之一.在计算完表达式的值后,test命令或者返回0(真)或者返回1(假). 可用"["命令对test命令进行缩写: [ expression ] 这里expression是test命令可以理解的任何有效表达式,该简化格式将是读者可能会踫见的最常用格式. test可理解的表达式类型分为三类: 文件测试. 字符串比较. 数字比较. 读者将逐步学业习这三类,另外,还会学习到复合表达式.
shell中的只读变量:使用readonly关键字,后面加上变量名即可,如 #name='sxf' #readonly name 即可.如果后面修改name的值,如 #name='tom' 会提示 "-bash: name: readonly variable" 错误信息. 在shell中删除变量只要用 unset variable 即可.但不能删除只读变量.
4.4 控制结构 在shell脚本中,使用控制结构就可以控制Linux命令的执行。使用控制结构,可以重复执行命令,或者选择特定的命令。控制结构包含两个主要的组件:测试操作(test)和命令。如果测试操作成功,则命令就会执行。这样的话,就可以使用控制结构来决定是否执行选定的命令。 存在两种不同类型的控制结构:循环和条件。循环结构会重复执行命令,而条件结构会在特定条件满足时执行命令。 BASH Shell有三种循环控制结构:while、for和for-in,两种条件控制结构:if和case。控制结构把Linux命令执行结果作为测试。 所有的Linux命令在执行结束后都会返回一个退出状态。如果某命令成功执行,退出状态将是0。如果因为某种原因该命令执行失败,则退出状态是表示失败类型的一个正值。控制结构会检查Linux命令的退出状态是0,还是其他值。对于if和while控制结构,如果退出状态是0,则说明该命令被成功执行,控制结构会继续。