zoukankan      html  css  js  c++  java
  • Linux生产服务器Shell脚本分享

    Linux生产服务器Shell脚本分享

    2012-6-6 86市场网 linux

    作为一名Linux/unix系统管理员,我经常遇到人问这个问题:shell能做什么?PHP这么强大,为什么不用PHP来完成工作呢?其实相对于PHP这些开发语言而言,shell主要用于数据库备份(SVN备份)、计划任务(crontab)、服务状态监控、FTP远程备份等。对于这些任务,shell的强大是大家都公认的,这也是每一个Linux/unix系统管理员的基本之一。现在在Windows 2008里也出现了PowerShell的身影,十分不错。

    下面我会用我的线上服务器的shell脚本举例来让大家了解shell及其用途。

    【目录】
    MySQL的热备份脚本
    用FTP同步服务器
    Keepalived的监控切换脚本
    SVN的版本库的批量备份
    自动监控ADSL并重拔号
    Linux批量生成生成帐户(10月11日更新)
    测试局域网内主机是否alive(10月11日更新)

    点击下方的子页面标题,进入对应的shell脚本页面进行阅读。
    一、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来实现,其好处是:
    FTP比rsync更能耗尽带宽,所以它更适合同步数据库(尤其是几百G的数据)
    配置起来相当方便,尤其是用pureftpd
    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服务,让另一台负载均衡器接手。此脚本详细内容如下:
    #!/bin/bash 
    while : 
    do 
    nginxpid=`ps -C nginx --no-header wc -l` 
    if [ $nginxpid -eq 0 ];then 
    /usr/local/nginx/sbin/nginx 
    sleep 5 
    if [ $nginxpid -eq 0 ];then 
    /etc/init.d/keepalived stop 
    fi 
    fi 
    sleep 5 
    done
    四、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
    五、自动监控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时此脚本也退出生效的问题。
    六、Linux批量生成生成帐户脚本

    此脚本应用于生产环境下生成帐户,也可生成成百上千个密码相同的帐户。脚本代码如下:
    #!/bin/bash
    for name in tom jerry joe jane
    do
    useradd $name
    echo redhat passwd --stdin $name
    done

    自己使用的时候,用自己需要的帐户名列表替换掉这个代码范例里的tom jerry joe jane等字段即可。密码都是redhat,可以让用户之后自己更改。
    七、测试局域网内主机是否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 

    ※温馨小提示:注意$?与=之间必须空格。

    小结

    其它一些自动监控MySQL状态等脚本我感觉比较简单,适合于新手学习,有兴趣的可去抚琴煮酒的百度博客参观学习。如果大家感兴趣,以后也会分批整理出来跟大家分享。希望大家看了诸如此类的shell脚本,能从中学到对自己有所帮助的知识。

  • 相关阅读:
    Android 开发 深入理解Handler、Looper、Messagequeue 转载
    Android 开发 Handler的基本使用
    Java 学习 注解
    Android 开发 AlarmManager 定时器
    Android 开发 框架系列 百度语音合成
    Android 开发 框架系列 Google的ORM框架 Room
    Android 开发 VectorDrawable 矢量图 (三)矢量图动画
    Android 开发 VectorDrawable 矢量图 (二)了解矢量图属性与绘制
    Android 开发 VectorDrawable 矢量图 (一)了解Android矢量图与获取矢量图
    Android 开发 知晓各种id信息 获取线程ID、activityID、内核ID
  • 原文地址:https://www.cnblogs.com/archoncap/p/4768135.html
Copyright © 2011-2022 走看看