• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            面對現實,超越自己
            逆水行舟,不進則退
            posts - 269,comments - 32,trackbacks - 0
                 一般地,當在目標機器編譯安裝某個服務程序后,為了使服務能開機自啟動和關機自停止,則需要將其添加為系統服務。但不同的Linux系統管理服務的方法不同,如Ubuntu使用update-rc.d命令,而RedHat則使用              chkconfig命令。因此為了能自動識別系統的類型,減少人工控制,編寫了一個簡單的autosrv腳本,要求至少1個最多2個參數,特點如下:
                 ● 第1個參數只能為install或uninstall,表示安裝或卸載服務。
                 ● 第2參數是可選的,表示系統名稱,如果沒有指定,那么會自動識別,若出現提示錯誤,則表示應該要顯式指定系統名稱了。  
              1#! /bin/bash
              2# autosrv
              3
              4if [ $# -lt 1 ]; then
              5    echo "Usage: $(basename "$0") install | uninstall [sysname]"
              6    exit
              7elif [ "$1" != "install" -a "$1" != "uninstall" ]; then
              8    echo "The first parameter must be install or uninstall" 
              9    exit
             10fi
             11
             12action=$1
             13sysname=$2
             14srv_path=/etc/init.d/srv_name
             15
             16if [ -z "$sysname" ]; then
             17    sysname=`lsb_release -a | sed -n '2p' | awk '{if($0~/[Uu][Bb][Uu][Nn][Tt][Uu]/) print "ubuntu"; else if($0~/[Dd][Ee][Bb][Ii][Aa][Nn]/) print "debian"; else if($0~/[Rr][Ee][Dd][Hh][Aa][Tt]/) print "redhat"; else if($0~/[Cc][Ee][Nn][Tt][Oo][Ss]/) print "centos"; else print ""}'`
             18    if [ -z "$sysname" ]; then
             19        echo "Unknown system, please manual special it with the second parameter"
             20        exit
             21    fi
             22    echo "Current system is $sysname"
             23fi
             24
             25create_file_ubuntu_debian()
             26{
             27cat << END > $srv_path
             28#! /bin/bash
             29. /lib/lsb/init-functions
             30
             31END
             32cat srv_name.body >> $srv_path
             33}
             34
             35create_file_redhat_centos()
             36{
             37cat << END > $srv_path
             38#! /bin/bash
             39#chkconfig:2345 90 10
             40#description: srv name
             41
             42. /etc/rc.d/init.d/functions
             43
             44END
             45cat srv_name.body >> $srv_path
             46}
             47
             48chmod_file()
             49{
             50    chmod u+x $srv_path
             51}
             52
             53remove_file()
             54{
             55    rm -f $srv_path
             56}
             57
             58install_ubuntu_debian()
             59{
             60    create_file_ubuntu_debian
             61    chmod_file
             62    update-rc.d srv_name defaults 90 10
             63}
             64
             65uninstall_ubuntu_debian()
             66{
             67    update-rc.d -f srv_name remove
             68    remove_file
             69}
             70
             71install_redhat_centos()
             72{
             73    create_file_redhat_centos
             74    chmod_file
             75    chkconfig --add srv_name
             76}
             77
             78uninstall_redhat_centos()
             79{
             80    chkconfig --del srv_name
             81    remove_file
             82}
             83
             84case "$sysname" in
             85    ubuntu|debian)
             86    if [ "$action" = "install" ]; then
             87        install_ubuntu_debian
             88    else
             89        uninstall_ubuntu_debian
             90    fi
             91    ;;
             92
             93    redhat|centos)
             94    if [ "$action" = "install" ]; then
             95        install_redhat_centos
             96    else
             97        uninstall_redhat_centos
             98    fi
             99    ;;
            100
            101    *)
            102    echo "Currently only support ubuntu, debian, redhat and centos system"
            103    exit
            104    ;;
            105esac
                  從上可知,自動識別的方法是獲取lsb_release -a返回的文本再使用awk來匹配ubuntu,redhat,debian,centos這幾個子串(忽略大小寫)。要注意的是,返回的文本可能有所不同,當系統安裝了LSB模塊時,返回結果如下
                  沒有安裝時,返回結果如下
                  無論哪種情況,要提取分析的都是第2行文本,因此使用了sed -n '2p'。srv_name.body是不同系統相同的用于生成最終服務腳本的部分代碼文件,通常包含了start,stop,status,restart幾個函數,只是沒有包含前面的一部分,而這部分則由autosrv腳本來根據不同的系統生成不同的代碼。

            本文轉自:http://www.shnenglu.com/qinqing1984/archive/2014/01/03/205140.html
            posted on 2014-04-23 17:06 王海光 閱讀(440) 評論(0)  編輯 收藏 引用 所屬分類: 腳本
            欧洲成人午夜精品无码区久久| 久久国产精品偷99| 久久久久久亚洲AV无码专区| 亚洲va久久久噜噜噜久久天堂| 东方aⅴ免费观看久久av| 99久久er这里只有精品18| 中文字幕成人精品久久不卡| 中文字幕久久亚洲一区| 99久久国产热无码精品免费| 人妻中文久久久久| 99久久这里只有精品| 一级做a爰片久久毛片免费陪 | 欧美久久久久久精选9999| 亚洲伊人久久精品影院| 91精品免费久久久久久久久| 少妇无套内谢久久久久| 99国产欧美久久久精品蜜芽| 久久人人超碰精品CAOPOREN| 久久精品视频网| 久久亚洲精品成人AV| 伊人久久成人成综合网222| 青青青国产精品国产精品久久久久 | 久久综合给合久久狠狠狠97色 | 一本色道久久综合| 国产成人精品久久| 77777亚洲午夜久久多喷| 99久久夜色精品国产网站| 日韩久久久久中文字幕人妻| 99久久国产综合精品五月天喷水 | 亚洲国产精品无码成人片久久| 久久人人爽人人澡人人高潮AV| 国产欧美一区二区久久| 狠狠88综合久久久久综合网| 久久婷婷五月综合国产尤物app | 亚洲国产成人精品91久久久| 久久国产精品免费一区| 久久婷婷五月综合色99啪ak | 国产99精品久久| 久久精品天天中文字幕人妻| 精品久久久久久国产潘金莲| 狠狠色丁香久久婷婷综合五月 |