不看後悔的Linux生產服務器Shell腳本分享

    做爲一名Linux/unix系統管理員,我常常遇到人問這個問題:shell能作什麼?PHP這麼強大,爲何不用PHP來完成工做呢?其實相對於PHP這些開發語言而言,shell主要用於數據庫備份(SVN備份)、計劃任務(crontab)、服務狀態監控、FTP遠程備份等。對於這些任務,shell的強大是你們都公認的,這也是每個Linux/unix系統管理員的基本之一。如今在Windows 2008裏也出現了PowerShell的身影,十分不錯。mysql

    下面我會用個人線上服務器的shell腳本舉例來讓你們瞭解shell及其用途。linux

    【目錄】nginx

  1. MySQL的熱備份腳本
  2. 用FTP同步服務器
  3. Keepalived的監控切換腳本
  4. SVN的版本庫的批量備份
  5. 自動監控ADSL並重拔號
  6. Linux批量生成生成賬戶
  7. 測試局域網內主機是否alive

    點擊下方的子頁面標題,進入對應的shell腳本頁面進行閱讀。sql

    1、MySQL的熱備份腳本shell

    這是MySQL的備份方式之一,腳本以下:數據庫

#!/bin/bash
PATH=/usr/local/sbin:/usr/bin:/bin
 
# The Directory of Backup
BACKDIR=/usr/mysql_backup
# The Password of MySQL
ROOTPASS=password
 
# Remake the Directory of Backup
rm -rf $BACKDIR
mkdir -p $BACKDIR
 
# Get the Name of Database
DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /`
# 偷瞄了下我同事寫腳本的方式,發現他直接將DBLIST一個個手動敲上去了
# 數據庫少的狀況是能夠的,若是數據庫是成百以上呢,呵呵
 
# Backup with Database
for dbname in $DBLIST
do
mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy
done

    許多系統管理員喜歡用mysqldump --opt來備份數據庫,因爲比較簡單,我這裏就不重複了。bash

    2、用FTP同步服務器服務器

    許多系統管理員喜歡用rsync同步二臺服務器之間的數據,但咱們更喜歡用FTP來實現,其好處是:併發

  1. FTP比rsync更能耗盡帶寬,因此它更適合同步數據庫(尤爲是幾百G的數據)
  2. 配置起來至關方便,尤爲是用pureftpd
  3. rsync的優點是能夠快速海量同步小文件,好比二級目錄或三級目錄下的批量圖片等

    基本上FTP和rsync同步各有優點,看系統管理員的取捨了。如下是本部分要介紹的FTP同步的shell腳本方式:負載均衡

FTPOLDDATE=`date +%Y-%m-%d -d '-60 days'`
#在FTP定義60天間的日期變量,是爲了在FTP端保存60天的數據,逾期刪除。
 
HOST=192.168.4.199
FTP_USERNAME=db
FTP_PASSWORD=password
 
cd ${BACKDIR}/${DATE}
 
ftp -i -n -v << !
open ${HOST}
user ${FTP_USERNAME} ${FTP_PASSWORD}
bin
cd ${FTPOLDDATE}
mdelete *
cd ..
rmdir ${FTPOLDDATE}
mkdir ${DATE}
cd ${DATE}
mput *
bye
!

    3、Keepalived的監控切換腳本

    實現功能以下:針對Nginx+Keepalived,編寫nginx監控腳本nginx_pid.sh,放置在後臺一直監控nginx進程;如進程消失,嘗試重啓nginx,如是失敗則當即停掉本機的keepalived服務,讓另外一臺負載均衡器接手。此腳本詳細內容以下:

#!/bin/bash 
while :
do
nginxpid=`ps -C nginx --no-header | wc -l`
if [ $nginxpid -eq 0 ];then
ulimit -SHn 65535 #在併發數很大的狀況下,鏈接數太小會致使linux狂報錯,因此直接在nginx啓動前定義
/usr/local/nginx/sbin/nginx
sleep 5
if [ $nginxpid -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi
sleep 5 
done

    4、SVN的版本庫的批量備份

    實現其功能蠻簡單,主要是用了svnadmin hotcopy,這東東功能很強大,我常常用於svn的版本庫的轉移(順便說一句,上次不當心誤操做將庫刪光了,很輕鬆的用svnadmin hotcopy將其恢復過來了)。

for PROJECT in test project svntest
do
  cd ${SVNDIR}
  ${SVNADMIN} hotcopy ${PROJECT} ${BACKDIR}/${DATE}/${PROJECT} --clean-logs
 
  cd ${BACKDIR}/${DATE}
  tar zcvf ${PROJECT}_svn_${DATE}.tar.gz ${PROJECT} > /dev/null
  rm -rf ${PROJECT}
 
  echo "Repository: ${PROJECT} backup done into ${BACKDIR}/${DATE}/ Successful!"
 >> ${LogFile}
  /bin/sleep 2
done

    5、自動監控ADSL並重拔號的shell腳本

    公司辦公室的adsl愛掉線,一掉的話網關的gateway就沒了。所以編寫了下列腳本:

#!/bin/bash
while :
do
if route | tail -l | grep "0.0.0.0"
then
&>/dev/null
else
adsl-stop
adsl-start
fi
sleep 10
done

    執行腳本方法: nuhup sh route.sh &

    注意前面要用上nohup,這樣避免root用戶logout時此腳本也退出生效的問題。

    6、Linux批量生成生成賬戶腳本

    此腳本應用於生產環境下生成賬戶,也可生成成百上千個密碼相同的賬戶。腳本代碼以下:

#!/bin/bash
for name in tom jerry joe jane
do
      useradd $name
      echo redhat | passwd --stdin $name
done

    本身使用的時候,用本身須要的賬戶名列表替換掉這個代碼範例裏的tom jerry joe jane等字段便可。密碼都是redhat,可讓用戶以後本身更改。

    7、測試局域網內主機是否alive的小腳本

    此腳本用於檢查192.168.1.100到192.168.1.200之間的主機是否alive。腳本以下:

#!/bin/bash
#Checks to see if hosts 192.168.1.100-192.168.1.200 are alive
for n in {100..200}; do
         host=192.168.1.$n
         ping -c2 $host &>/dev/null
         if [ $? = 0 ]; then
                      echo "$host is UP"
         else
                      echo "$host is DOWN"
         fi
done

    ※舒適小提示:注意$?與=之間必須空格。

    小結

    若是你們感興趣,之後也會分批整理出來跟你們分享。但願你們看了諸如此類的shell腳本,能從中學到對本身有所幫助的知識。

相關文章
相關標籤/搜索