(1)监控80端口@H_301_5@写一个脚本,判断本机的80端口是否开启着,如果开启着什么都不做,如果发现端口不存在,那么重启一下httpd服务,并发邮件通知你自己。脚本写好后,可以每一分钟执行一次,也可以写一个死循环的脚本,30s检测一次。
#!/bin/bash mail=123@123.com ifnetstat-lnp|grep':80'|grep-q'LISTEN';then exit else /usr/local/apache2/bin/apachectlrestart>/dev/null2>/dev/null pythonmail.py$mail"check_80""The80portisdown." n=`psaux|grephttpd|grep-cvgrep` if[$n-eq0];then /usr/local/apache2/bin/apachectlstart2>/tmp/apache_start.err fi if[-s/tmp/apache_start.err];then pythonmail.py$mail'apache_start_error'`cat/tmp/apache_start.err` fi fi
(2) 域名代理
内网有一台机器不能连外网,所以没有办法使用yum,考虑过使用iptables nat 转发上网,但因为一些原因,放弃使用。所以想到Nginx代理,原理很简单。 A 不能访问 1网站, B可以访问,A和B可以内网通信,所以可以让B作为A的代理。 并且可以限定访问的来源IP,配置文件如下:
server{ listen80; server_nameaaa.combbb.comccc.comddd.comeee.com; location/{ resolver119.29.29.29; proxy_passhttp://$host; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; allow192.168.5.0/24; denyall; } } 说明:这里的119.29.29.29为一个DNS的ip,用resolver来指定。 假如B机器内网ip为192.168.5.11,只需要在A上加一条hosts192.168.5.11aaa.combbb.comccc.comddd.comeee.com
(3)备份数据库
设计一个shell脚本来备份数据库,首先在本地服务器上保存一份数据,然后再远程拷贝一份,本地保存一周的数据,远程保存一个月。
假定,我们知道MysqL root账号的密码,要备份的库为discuz,本地备份目录为/bak/MysqL,远程服务器ip为192.168.123.30,远程提供了一个rsync服务,备份的地址是 192.168.123.30::backup . 写完脚本后,需要加入到cron中,每天凌晨3点执行。
#!/bin/bash ###backupMysqLdata ###WritenbyAming. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/MysqL/bin d1=`date+%w` d2=`date+%d` pass="your_MysqL_password" bakdir=/bak/MysqL r_bakdir=192.168.123.30::backup exec1>/var/log/MysqLbak.log2>/var/log/MysqLbak.log echo"MysqLbackupbeginat`date+"%F%T"`." MysqLdump-uroot-p$pass--default-character-set=gbkdiscuz>$bakdir/$d1.sql rsync-az$bakdir/$d1.sql$r_bakdir/$d2.sql echo"MysqLbackupendat`date+"%F%T"`." 然后加入cron 03***/bin/bash/usr/local/sbin/MysqLbak.sh
服务器上跑的是LNMP环境,近期总是有502现象。502为网站访问的状态码,200正常,502错误是Nginx最为普通的错误状态码。由于502只是暂时的,并且只要一重启PHP-fpm服务则502消失,但不重启的话,则会一直持续很长时间。所以有必要写一个监控脚本,监控访问日志的状态码,一旦发生502,则自动重启一下PHP-fpm。
我们设定:
access_log /data/log/access.log
脚本死循环,每10s检测一次(假设每10s钟的日志条数为300左右)
#!/bin/bash log=/data/log/access.log N=10 while:;do ##因为10秒钟大概产生300条日志 tail-n300$log>/tmp/log n_502=`grep-c'502"'/tmp/log` if[$n_502-ge$N];then ##记录系统的状态 top-bn1>/tmp/`date+%H%M%S`-top.log vmstat15>/tmp/`date+%H%M%S`-vm.log /etc/init.d/PHP-fpmrestart2>/dev/null ##重启PHP-fpm服务后,应先暂缓1分钟,而后继续每隔10s检测一次 sleep60 fi sleep10 done
(10)删除文本中的字母
要求: 把一个文本文档的前5行中包含字母的行删除掉,同时把6到10行中的全部字母删除掉。
假设文本名字叫做1.txt,并且文本行数大于10,脚本如下 #!/bin/bash ##先获取该文本的行数 nu=`wc-l1.txt|awk'{print$1}'` ##对前5行进程处理 foriin`seq15` do ##使用sed把每一行的内容赋值给变量 l=`sed-n"$i"p1.txt` ##用grep判定是否匹配字母,-v取反,-q不输出内容 ifecho$l|grep-vq'[a-zA-Z]' then echo$l fi done ##对6-10行做删除字母处理 foriin`seq610` do l=`sed-n"$i"p1.txt` echo$l|sed's/[a-zA-Z]//g' done ##剩余的直接输出 foriin`seq11$nu` do sed-n"$i"p1.txt done ##若想把更改内容写入到1.txt,还需要把以上内容重定向到一个文本中,然后删除1.txt,再把刚刚重定向的文件更名为1.txt