天天看點

Shell腳本分享

【目錄】

1.MySQL的熱備份腳本

2.用FTP同步伺服器

3.Keepalived的監控切換腳本

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

5.自動監控ADSL并重拔号

6.Linux批量生成生成帳戶(10月11日更新)

7.測試區域網路内主機是否alive(10月11日更新)

一、MySQL的熱備份腳本

這是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來備份資料庫,由于比較簡單,我這裡就不重複了。

二、用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

!

三、Keepalived的監控切換腳本

實作功能如下:針對Nginx+Keepalived,編寫nginx監控腳本nginx_pid.sh,放置在背景一直監控nginx程序;如程序消失,嘗試重新開機nginx,如是失敗則立即停掉本機的keepalived服務,讓另一台負載均衡器接手。此腳本詳細内容如下:

while :

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

/etc/init.d/keepalived stop

fi

相關說明可參考我發在組網頻道的《企業級WEB的負載均衡高可用之LVS+Keepalived》一文。

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

實作其功能蠻簡單,主要是用了svnadmin hotcopy,這東東功能很強大,我經常用于svn的版本庫的轉移(順便說一句,上次不小心誤操作将庫删光了,很輕松的用svnadmin hotcopy将其恢複過來了)。

for PROJECT in test project svntest

cd ${SVNDIR}

${SVNADMIN} hotcopy ${PROJECT} ${BACKDIR}/${DATE}/${PROJECT} --clean-logs

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

五、自動監控ADSL并重拔号的shell腳本

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

if route | tail -l | grep "0.0.0.0"

then

&>/dev/null

else

adsl-stop

adsl-start

sleep 10

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

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

六、Linux批量生成生成帳戶腳本

此腳本應用于生産環境下生成帳戶,也可生成成百上千個密碼相同的帳戶。腳本代碼如下:

for name in tom jerry joe jane

useradd $name

echo redhat | passwd --stdin $name

自己使用的時候,用自己需要的帳戶名清單替換掉這個代碼範例裡的tom jerry joe jane等字段即可。密碼都是redhat,可以讓使用者之後自己更改。

七、測試區域網路内主機是否alive的小腳本

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

#Checks to see if hosts 192.168.1.100-192.168.1.200 are alive

for n in {100200}; do

host=192.168.1.$n

ping -c2 $host &>/dev/null

if [ $ = 0 ]; then

echo "$host is UP"

echo "$host is DOWN"

※溫馨小提示:注意$與=之間必須空格。

小結

其它一些自動監控MySQL狀态等腳本我感覺比較簡單,适合于新手學習,有興趣的可去撫琴煮酒的百度部落格參觀學習。如果大家感興趣,以後也會分批整理出來跟大家分享。希望大家看了諸如此類的shell腳本,能從中學到對自己有所幫助的知識。

oracle視訊教程請關注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html