文档章节

shell每日一炮

是江山
 是江山
发布于 2017/08/10 13:34
字数 1578
阅读 21
收藏 0

1、nginx log备份

mkdir -pv /data/logbak/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%Y%m")/$(date -d "yesterday"
 +"%m%d")
cd /data/logbak
cp -r /data/logs/* /data/logbak/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%Y%m")/$(date -d
 "yesterday" +"%m%d")/
cp /usr/local/nginx/logs/error.log  /data/logbak/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" 
+"%Y%m")/$(date -d "yesterday" +"%m%d")/
cd /data/logs/
rm -rf *
rm -rf /usr/local/nginx/logs/error.log
nginx -s reload

2、mongodb备份

#!/bin/bash
dump=/usr/bin/mongodump
temporary=/data/mongobak
date=`date +%Y-%m-%d`
db_user=name
db_pwd=pwd
days=7
cd $temporary
mkdir -p  $temporary/$date
$dump  -h127.0.0.1 -u $db_user -p $db_pwd -o $temporary/$date
#tar -zcvf $now/mongod_bak_$date.tar.gz $temporary/$date
#find $temporary/ mtime +$days -delete

exit 

3、每日生成一个文件

请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为)2017-07-05.log, 并且把磁盘的使用情况写到到这个文件中,(不用考虑cron,仅仅写脚本即可)

#! /bin/bash
d=`date +$F`         //获取今天日期定义为d
logfile= $d.log      //d+.log定义为logfile
df -h >$logfile      //磁盘使用情况追加到logfile

###shell下获取系统时间的方法直接调用系统变量

##获取今天时期
[root@jiangshan shell]# `date +%Y%m%d` 
[root@jiangshan shell]# `date +%F` 
[root@jiangshan shell]# $(date +%y%m%d) 

[root@jiangshan shell]# `date -d yesterday +%Y%m%d`  //获取昨天时期
[root@jiangshan shell]# `date -d -2day +%Y%m%d`      //获取前天日期

## 依次类推比如获取10天前的日期:
[root@jiangshan shell]# `date -d -10day +%Y%m%d`     
[root@jiangshan shell]# `date -d "n days ago" +%y%m%d`   //或n天前的
[root@jiangshan shell]# `date -d tomorrow +%y%m%d`     //明天
注意以上中间有空格

shell获取时间函数和date用法参数

4、统计日志

有日志1.log,内容如下:

###日志片段:
112.111.12.248 – [25/Sep/2013:16:08:31 +0800]formula-x.haotui.com
“/seccode.php?update=0.5593110133088248″
200″http://formula-x.haotui.com/registerbbs.php” “Mozilla/4.0 (compatible; MSIE
6.0; Windows NT 5.1; SV1;)”
61.147.76.51 – [25/Sep/2013:16:08:31 +0800]xyzdiy.5d6d.com
“/attachment.php?aid=4554&k=9ce51e2c376bc861603c7689d97c04a1&t=1334564048&fid=9&si
d=zgohwYoLZq2qPW233ZIRsJiUeu22XqE8f49jY9mouRSoE71″
301″http://xyzdiy.5d6d.com/thread-1435-1-23.html” “Mozilla/4.0 (compatible; MSIE
6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)”

要求: 统计出每个IP的访问量有多少?

awk '{print $1}' 1.log |sort -n|uniq -c

5、进程占用内存大小

需求:写一个脚本计算一下linux系统所有进程占用内存大小的和。(提示,使用ps或者top命令)

  • 方法一
#! /bin/bash
sum=0             //定义总数为0
for mum in   ` ps aux    | awk '{print $6}'| grep -v 'RSS'`
//for循环    查看进程      获取第6行         除去RSS   
do
sum=$[$sum+$mum]     //相加总和
done
echo "the total memory is $sum""K"   //输出
  • 方法二
ps aux |grep 'RSS TTS'|awk '{(sum=sum+$6)};END{print $sum}'

6、设计监控脚本

设计一个脚本,监控远程的一台机器(假设ip为123.23.11.21)的存活状态,当发现宕机时发一封邮件给你自己。

提示:

你可以使用ping命令 ping -c10 123.23.11.21 发邮件脚本可以参考 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py 脚本可以搞成死循环,每隔30s检测一次

#!/bin/bash

ip=123.23.11.21
ma=abc@139.com

while 1

do
ping -c10 $ip >/dev/null 2>/dev/null
if [ $? != “0” ];then
python /usr/local/sbin/mail.py $ma “$ip down” “$ip is down”

#假设mail.py已经编写并设置好了
fi
sleep 30
done

7、批量更改文件名

  1. 这里是列表文本
  2. 找到/123目录下所有后缀名为.txt的文件
  3. 批量修改.txt为.txt.bak
  4. 把所有.bak文件打包压缩为123.tar.gz
  5. 批量还原文件的名字,即把增加的.bak再删除
#!/bin/bash
##查找txt文件
find /123 -type f -name "*.txt" > /tmp/txt.list
##批量修改文件名
for f in `cat /tmp/txt.list`
do
    mv $f $f.bak
done
##创建一个目录,为了避免目录已经存在,所以要加一个复杂的后缀名
d=`date +%y%m%d%H%M%S`
mkdir /tmp/123_$d
##把.bak文件拷贝到/tmp/123_$d
for f in `cat /tmp/txt.list`
do
    cp $f.bak /tmp/123_$d
done
##打包压缩
cd /tmp/
tar czf 123.tar.gz 123_$d/
##还原
for f in `cat /tmp/txt.list`
do
    mv $f.bak $f
done

8、监控80端口

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

#! /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

9、域名代理

内网有一台机器不能连外网,所以没有办法使用yum,考虑过使用iptables nat 转发上网,但因为一些原因,放弃使用。所以想到nginx代理,原理很简单。 A 不能访问 1网站, B可以访问,A和B可以内网通信,所以可以让B作为A的代理。 并且可以限定访问的来源IP,配置文件如下:

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上加一条hosts 192.168.5.11 aaa.com bbb.com ccc.com ddd.com eee.com

10、备份数据库

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

#! /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

11、截取系统一分钟负载部分只取整数部分

uptime|awk -F 'load average:' '{print $2}'|cut -d. -f1|sed 's/ //'

© 著作权归作者所有

上一篇: 安装PHP
下一篇: Tomcat(二)
是江山
粉丝 4
博文 44
码字总数 24060
作品 0
苏州
运维
私信 提问
游戏场次

捕鱼: 游戏模式:int (1 单人场 2 多人场) 一炮最小消耗:int 一炮最大消耗:int 进场金币:int 离场金币:int 斗地主 游戏模式:int (1 普通场 2 激情场-不洗牌) 底注:int 人数:int (1 正...

摩天轮-呆呆兽
2018/07/26
3
1
oschina有喜了,千里一炮而红,佩服@滔哥 ,@走在路上这种千里吸引力

千里一炮而红,指的是他俩一下成了oschina关注焦点人物。。。。。。。

huanlin08
2013/04/13
208
2
学习笔记汇总

linux系统管理和服务搭建配置: 关于Linux的历史 linux系统启动过程和系统目录结构 安装和优化linux系统基础环境 Linux文件与目录管理 Linux系统用户及用户组管理 linux系统文档的压缩与打包...

qq441009395
2017/07/24
0
0
高效的软件项目管理和协作工具 TeamCat

Teamcat的项目管理包含了任务、提测、Bug管理,统计分析等功能。支持多成员协作,并且深度集成了持续集成(CI)。Teamcat 支持每日构建,自动化测试,一键部署等功能。 Teamcat 通过任务流功...

蒋轩
09/11
20
0
高效的软件项目管理和协作工具 - TeamCat

Teamcat的项目管理包含了任务、提测、Bug管理,统计分析等功能。支持多成员协作,并且深度集成了持续集成(CI)。Teamcat 支持每日构建,自动化测试,一键部署等功能。 Teamcat 通过任务流功...

陆思远
2018/10/24
18.8K
7

没有更多内容

加载失败,请刷新页面

加载更多

如何使用soapUI模拟webservice客户端发送请求

参考资料 https://jingyan.baidu.com/article/cbcede0712849a02f40b4d88.html 左边是请求参数,可以自己填写!按着那个绿色三角箭头可以模拟发送请求,右边是返回的报文 soapui如何发送xml格...

故久呵呵
25分钟前
4
0
Java Security 介绍

1.介绍 Java平台设计的重点是安全性。在其核心,java语言本身是类型安全的并且提供了垃圾自动回收,这使其增加了应用程序代码的健壮性。安全的类加载以及验证机制确保了只有合法的代码才能够...

lixiaobao
31分钟前
4
0
Niushop开源商城系统-分销商管理

分销商管理 1.分销员的招募与管理 如何申请成为分销员? 在wap端个人中心满足之前设置的升级条件,可以申请分销员 开启分销商审核,需要在后台分销商管理——》待审核处进行审核通过。 通过完...

niushop-芳
32分钟前
3
0
为什么大公司一定要使用 DevOps?

究竟什么是DevOps? 要想回答这个问题,首先要明确DevOps这个过程参与的人员是谁,即开发团队和IT运维团队。那么,DevOps的意图是什么呢?即在两个团队之间,建立良好的沟通和协作,更快更可靠...

cs平台
34分钟前
5
0
高危预警|RDP漏洞或引发大规模蠕虫爆发,用户可用阿里云免费检测服务自检,建议尽快修复

2019年9月6日,阿里云应急响应中心监测到Metasploit-framework官方在GitHub空间公开了针对Windows远程桌面服务远程命令执行漏洞(CVE-2019-0708)的利用代码。利用该代码,无需用户交互操作,即...

Mr_zebra
39分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部