• <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>
            隨筆-162  評(píng)論-223  文章-30  trackbacks-0
            腳本概述
               一般地,當(dāng)在目標(biāo)機(jī)器編譯安裝某個(gè)服務(wù)程序后,為了使服務(wù)能開(kāi)機(jī)自啟動(dòng)和關(guān)機(jī)自停止,則需要將其添加為系統(tǒng)服務(wù)。但不同的Linux系統(tǒng)管理服務(wù)的方法不同,如Ubuntu使用update-rc.d命令,而RedHat則使用chkconfig命令。因此為了能自動(dòng)識(shí)別系統(tǒng)的類(lèi)型,減少人工控制,編寫(xiě)了一個(gè)簡(jiǎn)單的autosrv腳本,要求至少1個(gè)最多2個(gè)參數(shù),特點(diǎn)如下:
               ● 第1個(gè)參數(shù)只能為install或uninstall,表示安裝或卸載服務(wù)。
               ● 第2參數(shù)是可選的,表示系統(tǒng)名稱(chēng),如果沒(méi)有指定,那么會(huì)自動(dòng)識(shí)別,若出現(xiàn)提示錯(cuò)誤,則表示應(yīng)該要顯式指定系統(tǒng)名稱(chēng)了。

            腳本實(shí)現(xiàn)
              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
               從上可知,自動(dòng)識(shí)別的方法是獲取lsb_release -a返回的文本再使用awk來(lái)匹配ubuntu,redhat,debian,centos這幾個(gè)子串(忽略大小寫(xiě))。要注意的是,返回的文本可能有所不同。

               當(dāng)系統(tǒng)安裝了LSB模塊時(shí),返回結(jié)果如下
               

               沒(méi)有安裝時(shí),返回結(jié)果如下
               
               無(wú)論哪種情況,要提取分析的都是第2行文本,因此使用了sed -n '2p'。srv_name.body是不同系統(tǒng)相同的用于生成最終服務(wù)腳本的部分代碼文件,通常包含了start,stop,status,restart幾個(gè)函數(shù),只是沒(méi)有包含前面的一部分,而這部分則由autosrv腳本來(lái)根據(jù)不同的系統(tǒng)生成不同的代碼。
            posted on 2014-01-03 17:11 春秋十二月 閱讀(1981) 評(píng)論(1)  編輯 收藏 引用 所屬分類(lèi): System

            評(píng)論:
            # re: shell應(yīng)用(5): 自動(dòng)生成并安裝服務(wù)腳本 2014-01-03 21:23 | 梁.兄
            不錯(cuò),看來(lái)你linux熟很多了  回復(fù)  更多評(píng)論
              
            久久99精品国产麻豆| 伊人久久一区二区三区无码| 中文字幕久久久久人妻| 国产情侣久久久久aⅴ免费| 国产成人综合久久综合| 亚洲精品美女久久久久99小说| 久久天天躁狠狠躁夜夜avapp | 国产精品99精品久久免费| 国产成人综合久久综合| 伊人久久大香线焦AV综合影院| 国产亚洲婷婷香蕉久久精品| 一本大道久久香蕉成人网| av无码久久久久久不卡网站| 中文字幕无码av激情不卡久久| 久久狠狠高潮亚洲精品| 国内精品综合久久久40p| 精品久久国产一区二区三区香蕉| 久久久精品国产sm调教网站| 久久精品无码一区二区WWW| 欧美久久一区二区三区| 国产精品VIDEOSSEX久久发布| 老司机国内精品久久久久| 久久―日本道色综合久久| 精品久久久久久中文字幕| 国产精品福利一区二区久久| 久久综合噜噜激激的五月天| 国内精品人妻无码久久久影院| 嫩草伊人久久精品少妇AV| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 中文成人久久久久影院免费观看| 久久久久女教师免费一区| 亚洲天堂久久久| 久久福利青草精品资源站| 久久婷婷色香五月综合激情| 精品久久久久久无码中文野结衣| 大美女久久久久久j久久| 亚洲精品无码专区久久同性男| 97久久精品无码一区二区| 国产一区二区久久久| 久久午夜无码鲁丝片秋霞| 无码8090精品久久一区|