使用Shell脚本初始化服务配置

  • 生产实践:

    使用shell针对服务进行个性化配置

  • 学习技巧:

    Shell 判断、循环、function,配置crontab、rsync、系统内核参数

  • 脚本内容:      

使用shell脚本在业务初始化时执行服务个性化配置,提高机器快速扩容效率。

#!/bin/bash
# author: anzhihe 2020-03-25
# mail: anzhihe@chegva.com
set -x

hostname=`hostname`
baseurl=""

# select baseurl
function select_baseurl() {
    if [[ $hostname == *dictchunk* ]] ; then
        baseurl="https://git.chegva.com/anzhihe/rt-init/raw/master/dict-chunk"
    elif  [[ $hostname == *public-rtchunk* ]] ; then
        baseurl="https://git.chegva.com/anzhihe/rt-init/raw/master/pub-rt-chunk"
    elif [[ $hostname == *gs-rtchunk* ]]; then
        baseurl="https://git.chegva.com/anzhihe/rt-init/raw/master/rt-chunk"
    else
        echo "无需baseurl配置,请忽略!"
    fi
}

# add network rto
function add_rto() {
    gateway=`ip r |grep default|awk '{print $3}'`
    if [ -z $gateway ];then
        echo "gateway is null"
        exit 1
    fi
    localIP=`hostname |xargs host |awk '{print $NF}'`
    if [[ $localIP == 100\.69* || $localIP == 100\.70*  || $localIP == 100\.89* || $localIP == 100\.90* ]];then
        echo "gz ip: $localIP"
        ip r add 100.69.0.0/16  via $gateway rto_min 50ms
        ip r add 100.70.0.0/16  via $gateway rto_min 50ms
        ip r add 100.89.64.0/18  via $gateway rto_min 50ms
        ip r add 100.90.0.0/16  via $gateway rto_min 50ms
        if [[ $? -eq 0 ]];then
            echo "ip r add 100.69.0.0/16  via $gateway rto_min 50ms" >> /etc/rc.local
            echo "ip r add 100.70.0.0/16  via $gateway rto_min 50ms" >> /etc/rc.local
            echo "ip r add 100.89.64.0/18  via $gateway rto_min 50ms" >> /etc/rc.local
            echo "ip r add 100.90.0.0/16  via $gateway rto_min 50ms" >> /etc/rc.local
        fi

    elif [[ $localIP == 10\.88* || $localIP == 10\.89* || $localIP == 10\.90* ]];then
        echo "bj ip: $localIP"
        ip r add 10.88.0.0/16  via $gateway rto_min 50ms
        ip r add 10.89.0.0/16  via $gateway rto_min 50ms
        ip r add 10.90.0.0/16  via $gateway rto_min 50ms

        if [[ $? -eq 0 ]];then
            echo "ip r add 10.88.0.0/16  via $gateway rto_min 50ms" >> /etc/rc.local
            echo "ip r add 10.89.0.0/16  via $gateway rto_min 50ms" >> /etc/rc.local
            echo "ip r add 10.90.0.0/16  via $gateway rto_min 50ms" >> /etc/rc.local
        fi
    elif [[ $localIP == 10\.85* || $localIP == 10\.86* || $localIP == 10\.87* ]];then
        echo "sh ip: $localIP"
        ip r add 10.85.0.0/16  via $gateway rto_min 50ms
        ip r add 10.86.0.0/16  via $gateway rto_min 50ms
        ip r add 10.87.0.0/16  via $gateway rto_min 50ms

        if [[ $? -eq 0 ]];then
            echo "ip r add 10.85.0.0/16  via $gateway rto_min 50ms" >> /etc/rc.local
            echo "ip r add 10.86.0.0/16  via $gateway rto_min 50ms" >> /etc/rc.local
            echo "ip r add 10.87.0.0/16  via $gateway rto_min 50ms" >> /etc/rc.local
        fi
    else
        echo "not bj or gz sh ip, exit"
        exit 0
    fi
}

# add kernel para
function add_kernel_para() {
    ## 关闭coredump
    sysctl -w kernel.core_pattern="|/bin/false"
    echo "kernel.core_pattern = |/bin/false" >> /etc/sysctl.conf

    ## 备份sysctl.conf
    cp /etc/sysctl.conf /tmp/sysctl.conf.bak

    #hostname=`hostname`
    if [[ $hostname == *\.docker ]] ; then
        echo "docker机器跳过"
        exit 1
    fi

    # if [[ $hostname == *\.us01 ]] ; then
    # 	echo "美东机器跳过"
    # 	exit 1
    # fi

    ncs="net.core.somaxconn"
    sysctl -w ${ncs}=4096

    if grep -o "${ncs}" /etc/sysctl.conf > /dev/null
    then
         oldvalue=$(grep ${ncs} /etc/sysctl.conf|tail -1 | awk -F "=| " '{ print $NF }')

         if [ $oldvalue -ne 4096 ]
         then
            sed -i "s|\("${ncs}" *= *\).*|\14096|" /etc/sysctl.conf
         else
            echo "${ncs} 无需改动"
         fi
    else
        echo "新加vm配置"
        echo "${ncs} = 4096" >> /etc/sysctl.conf
    fi

    nitmsb="net.ipv4.tcp_max_syn_backlog"
    sysctl -w ${nitmsb}=4096

    if grep -o "$nitmsb" /etc/sysctl.conf > /dev/null
    then
         oldvalue=$(grep ${nitmsb} /etc/sysctl.conf|tail -1 | awk -F "=| " '{ print $NF }')

         if [ $oldvalue -ne 4096 ]
         then
            sed -i "s|\("${nitmsb}" *= *\).*|\14096|" /etc/sysctl.conf
         else
            echo "${nitmsb} 无需改动"
         fi
    else
        echo "新加vm配置"
        echo "${nitmsb} = 4096" >> /etc/sysctl.conf
    fi
}

# add system crontab
function add_cron() {

    if [[ $hostname == *dictchunk* ]] ; then
        if grep -q "archive_trp_clean.sh" /var/spool/cron/anzhihe; then
            echo "archive_trp_clean定时任务已经添加!"
        else
            echo "00 04 * * * cd /home/anzhihe/DDict/dict-chunk/ && bash archive_trp_clean.sh" >> /var/spool/cron/anzhihe
            echo "添加ddict crontab完成"
        fi
        
    elif  [[ $hostname == *public-rtchunk* || $hostname == *gs-rtchunk* ]] ; then

        curl -sq $baseurl/clear_unitdb_log.sh -w "\n" > /home/anzhihe/opbin/clear_unitdb_log.sh
        chown anzhihe.anzhihe  /home/anzhihe/opbin/clear_unitdb_log.sh
        chmod 744 /home/anzhihe/opbin/clear_unitdb_log.sh
        
        if grep -q "clear_unitdb_log.sh" /var/spool/cron/anzhihe; then
            echo "clear_unitdb_log定时任务已经添加!"
        else
            echo "*/5 * * * * cd /home/anzhihe/opbin;./clear_unitdb_log.sh >> clear_unitdb_log 2>&1" >> /var/spool/cron/anzhihe
            echo "添加rt crontab完成"
        fi
    else
        echo "no cron need to add "
    fi
}

# add rsyncd config
function add_rsyncd_config() {
    curl -sq $baseurl/rsyncd.password -w "\n" > /etc/rsyncd.password
    curl -sq $baseurl/rsync.password -w "\n" > /etc/rsync.password

    chmod 600  /etc/rsyncd.password /etc/rsync.password
    chown root.root  /etc/rsyncd.password
    chown anzhihe.anzhihe  /etc/rsync.password

    if [[ $hostname == *\.gz01 ]] ; then
        idc="gz"
    elif  [[ $hostname == *\.ys || $hostname == *\.py02 ]] ; then
        idc="sh"
    elif [[ $hostname == *\.us01 || $hostname == *\.ru01 ]]; then
        idc="us01"
        # 配置us01 ntp
        #cp -f /etc/ntp.conf /etc/ntp.conf.bak-`date +%Y%m%d`
        #cp -f /usr/local/sys/configure/all_etc/ntp_md.conf /etc/ntp.conf
        #systemctl restart ntpd
    else
        echo "机器不在合理机房"
        exit 1
    fi

    if [ `ps -elf|grep -v grep |grep -c /usr/bin/rsync` -lt 1 ]; then
	    curl -sq $baseurl/${idc}.rsyncd.conf -w "\n" > /etc/rsyncd.conf
	    /usr/bin/rsync --daemon && echo "rsync已启动。"
	    echo "/usr/bin/rsync --daemon"  >> /etc/rc.d/rc.local
#    else
#    	curl -sq $baseurl/${idc}.rsyncd-append.conf -w "\n" >> /etc/rsyncd.conf
    fi

    echo "添加rsync配置完成..."
}

function main() {
    if [[ $hostname == *chunk* ]]; then
        select_baseurl
        add_kernel_para
        add_cron
        add_rsyncd_config
    else
        echo "非存储机器略过..."
        exit 0
    fi
}

main


参考:Cobbler批量装机系统初始化脚本

anzhihe安志合个人博客,版权所有丨 如未注明,均为原创 丨转载请注明转自:https://chegva.com/4343.html | ☆★★每天进步一点点,加油!★★☆

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注