shell腳本持續更新

1.用shell查看磁盤是否大於80%併發送郵箱告警。python

分析如何查看磁盤佔用:mysql

# df -h | grep /dev/vda1 | awk '{print $5}' |cut -d "%" -f1
或者
# df -h | grep /dev/vda1 | awk '{print $5}' |awk -F "%" '{print $1}'

考慮到shell腳本if判斷是否大於80,寫入腳本:nginx

#!/bin/bash
rate=`df -h | grep /dev/vda1 | awk '{print $5}' |cut -d "%" -f1`
if [ $rate -ge 80 ];
      then
      python /root/mail.py 123456@qq.com "郵件主題" "郵件內容/dev/vda1 The disk is full"
 fi

python腳本:web

#!/usr/bin/python
#coding:utf-8

import smtplib
from email.mime.text import MIMEText
import sys

#發信地址
mail_user = 'admin@' //帳號
#發信地址的SMTP密碼
mail_pass = 'pqj0Ll6yd' //密碼

def send_mail(to_list,subject,content):
    me = "aliyun告警平臺"+"<"+mail_user+">"
    msg = MIMEText(content, 'plain', 'utf-8')
    msg['Subject'] = subject
    msg['From'] = me
    msg['to'] = to_list

    try:
    	#定義阿里雲提供的SMTP服務地址
        s = smtplib.SMTP("smtpdm.aliyun.com", 25) //注,阿里雲服務器是沒開放25端口,改80端口便可
        s.login(mail_user,mail_pass)
        s.sendmail(me,to_list,msg.as_string())
        s.close()
        return True
    except Exception,e:
        print str(e)
        return False

if __name__ == "__main__":
    send_mail(sys.argv[1], sys.argv[2], sys.argv[3])

 

測試結果:sql

 

 

2.判斷nginx80端口是否開啓,若是不開啓,自動開啓shell

首先網絡掃描nmap默認包是不存在,安裝數據庫

# yum install -y nmap

分析端口是否開放bash

# nmap -sT 192.168.109.136 | grep tcp |grep http |awk '{print $2}'
open

用shell腳本判斷服務器

 #!/bin/bash
  nginx=`nmap -sT 192.168.109.136 | grep tcp |grep http |awk '{print $2}'`
  data=`date +%Y%m%d`
  if [ "$http" == "open" ]
      then
      echo "$data nginx is ok! " >> /tmp/http-acc.log
      else
      /etc/init.d/nginx start &>/dev/null
      python /usr/local/sbin/mail.py 123456@qq.com "監控nginx宕機自動重啓告警" "$data restart nginx!!!"//能夠去掉告警
      echo "$data restart nginx !" >> /tmp/http-err.log
  fi

測試結果網絡

 

 3.用shell天天零晨備份mysql數據庫,備份數據傳輸到備份服務器

#!/bin/bash
datadir=/tmp/mysql/`date +%Y%m%d` //定義時間
datadb=dedecms //庫名
datadb1=discuz //庫名
datadb2=zrlog //庫名
dbuser=root //用戶
dbpass=123 //密碼
backcmd=mysqldump //備份命令 注:最好絕對路徑
if [ ! -d $datadir ];then //判斷是否存在
        mkdir -p $datadir //不存在建立
        echo "mkdir successful" //成功
else
        echo "mkdir failure" //失敗,失敗多是目錄存在,不用管
fi
$backcmd -u$dbuser -p$dbpass $datadb >$datadir/$datadb.sql //備份
$backcmd -u$dbuser -p$dbpass $datadb1 >$datadir/$datadb1.sql //備份
$backcmd -u$dbuser -p$dbpass $datadb2 >$datadir/$datadb2.sql //備份
rsync -avP /tmp/mysql/ 172.31.215.135:/tmp/mysql //上傳到備份服務器

4.靜態文件備份,要傳到備份靜態服務器

#!/bin/bash
BCK_DIR="/tmp/data" //定義路徑
WEB_DIR="/mnt/*" //定義備份路徑
DATE=`date +%F` //時間
DATE_YEAR=`date +%Y` //時間
DATE_MONTH=`date +%m` //時間
days=7 //時間

if test -d $BCK_DIR/$DATE_YEAR/$DATE_MONTH //判斷
then
    echo "directory  $BCK_DIR/$DATE_YEAR/$DATE_MONTH exists."
else
    echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH does not exists. make dir..."
    mkdir -p $BCK_DIR/$DATE_YEAR/$DATE_MONTH //不存在建立
fi

# Backup
tar -czf $BCK_DIR/$DATE_YEAR/$DATE_MONTH/web_$DATE.tar.gz  $WEB_DIR //打包
find $BCK_DIR/$DATE_YEAR/ -type f -name "*.tar.gz" -mtime +$days -exec  rm -rf {} \; //超過7天刪除
rsync -avP $BCK_DIR 172.31.215.135:/tmp/data/ //拷貝到備份服務器

5.批量建立用戶並設置密碼,把密碼寫入文件

  1. 隨機密碼使用命令 mkpasswd
  2. 在腳本中給用戶設置密碼,能夠使用echo 而後管道passwd命令

 實現腳本以下:

#!/bin/bash
for i in `seq 00 09`
do
useradd user$i
pass=`mkpasswd`
echo "user$i $pass" >> /root/shell.txt
echo "$pass" |passwd --stdin user$i &> /dev/null
done         

批量刪除用戶

#!/bin/bash
for i in `seq 00 09`
do
userdel -r user$i
done
相關文章
相關標籤/搜索