Shell练习题(2)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

(1)监控80端口
写一个脚本,判断本机的80端口是否开启着,如果开启着什么都不做,如果发现端口不存在,那么重启一下httpd服务,并发邮件通知你自己。脚本写好后,可以每一分钟执行一次,也可以写一个死循环的脚本,30s检测一次。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#! /bin/bash
mail=123@123.com
if  netstat  -lnp | grep  ':80'  | grep  -q  'LISTEN' then
     exit
else
     /usr/local/apache2/bin/apachectl  restart > /dev/null  2>  /dev/null
     python mail.py $mail  "check_80"  "The 80 port is down."
     n=` ps  aux | grep  httpd| grep  -cv  grep `
     if  [ $n - eq  0 ];  then
         /usr/local/apache2/bin/apachectl  start 2> /tmp/apache_start .err
     fi
     if  [ -s  /tmp/apache_start .err ];  then
         python mail.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,配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
     listen       80;
     server_name aaa.com bbb.com  ccc.com ddd.com eee.com;
 
     location / {
         resolver 119.29.29.29;
         proxy_pass       http://$host;
         proxy_set_header Host      $host;
         proxy_set_header X-Real-IP $remote_addr;
         allow 192.168.5.0/24;
         deny all;
     }
}
 
说明:这里的119.29.29.29 为一个DNS的ip,用resolver来指定。
假如B机器内网ip为 192.168.5.11,只需要在A上加一条hosts192.168.5.11 aaa.com bbb.com ccc.com ddd.com eee.com

(3)备份数据库

设计一个shell脚本来备份数据库,首先在本地服务器上保存一份数据,然后再远程拷贝一份,本地保存一周的数据,远程保存一个月。
假定,我们知道mysql root账号的密码,要备份的库为discuz,本地备份目录为/bak/mysql, 远程服务器ip为192.168.123.30,远程提供了一个rsync服务,备份的地址是 192.168.123.30::backup . 写完脚本后,需要加入到cron中,每天凌晨3点执行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#! /bin/bash
### backup mysql data
### Writen by Aming.
 
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
 
exec  1> /var/log/mysqlbak .log 2> /var/log/mysqlbak .log
 
echo  "mysql backup begin at `date +" %F %T "`."
mysqldump -uroot -p$pass --default-character- set =gbk discuz >$bakdir/$d1.sql
rsync  -az $bakdir/$d1.sql $r_bakdir/$d2.sql
echo  "mysql backup end at `date +" %F %T "`."
 
然后加入 cron
0 3 * * *  /bin/bash  /usr/local/sbin/mysqlbak .sh

(4)自动重启nginx服务

服务器上跑的是LNMP环境,近期总是有502现象。502为网站访问的状态码,200正常,502错误是nginx最为普通的错误状态码。由于502只是暂时的,并且只要一重启php-fpm服务则502消失,但不重启的话,则会一直持续很长时间。所以有必要写一个监控脚本,监控访问日志的状态码,一旦发生502,则自动重启一下php-fpm。

我们设定:

  1. access_log /data/log/access.log

  2. 脚本死循环,每10s检测一次(假设每10s钟的日志条数为300左右)

  3. 重启php-fpm的方法是 /etc/init.d/php-fpm restart

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#! /bin/bash
log= /data/log/access .log
N=10
while  :;  do
     ##因为10秒钟大概产生300条日志
     tail  -n 300 $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
         vmstat 1 5 > /tmp/ ` date  +%H%M%S`-vm.log
         /etc/init .d /php-fpm  restart 2> /dev/null
         ##重启php-fpm服务后,应先暂缓1分钟,而后继续每隔10s检测一次
         sleep  60
     fi    
     sleep  10
done

(10)删除文本中的字母

要求: 把一个文本文档的前5行中包含字母的行删除掉,同时把6到10行中的全部字母删除掉。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
假设文本名字叫做1.txt,并且文本行数大于10,脚本如下
 
#!/bin/bash
##先获取该文本的行数
nu=` wc  -l 1.txt | awk  '{print $1}' `
##对前5行进程处理
for  in  ` seq  1 5`
do 
     ##使用sed把每一行的内容赋值给变量
     l=` sed  -n  "$i" p 1.txt`
     ##用grep 判定是否匹配字母,-v取反,-q不输出内容
     if  echo  $l | grep  -vq  '[a-zA-Z]'
     then
     echo  $l
     fi
done
##对6-10行做删除字母处理
for  in  ` seq  6 10`
do
     l=` sed  -n  "$i" p 1.txt`
     echo  $l| sed  's/[a-zA-Z]//g'
done
##剩余的直接输出
for  in  ` seq  11 $nu`
do
     sed  -n  "$i" p 1.txt
done
##若想把更改内容写入到1.txt,还需要把以上内容重定向到一个文本中,然后删除1.txt,再把刚刚重定向的文件更名为1.txt











本文转自Grodd51CTO博客,原文链接:http://blog.51cto.com/juispan/1951343 ,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8月前
|
运维 监控 应用服务中间件
【运维知识高级篇】34道Shell编程练习题及答案(从基础到实战:基础+计算+判断+循环+控制与数组+实战进阶)(二)
【运维知识高级篇】34道Shell编程练习题及答案(从基础到实战:基础+计算+判断+循环+控制与数组+实战进阶)(二)
370 0
|
8月前
|
运维 Shell Linux
【运维知识高级篇】34道Shell编程练习题及答案(从基础到实战:基础+计算+判断+循环+控制与数组+实战进阶)(一)
【运维知识高级篇】34道Shell编程练习题及答案(从基础到实战:基础+计算+判断+循环+控制与数组+实战进阶)
258 0
|
10月前
|
监控 Shell Linux
Shell语句判断练习题
Shell语句判断练习题
86 0
|
MySQL 关系型数据库 Shell
|
监控 Shell Apache
|
Web App开发 关系型数据库 MySQL