운영 자동화 SHELL 스 크 립 트

최근 에 새로운 업무 가 바 빠 서 박문 을 쓸 시간 이 없 었 습 니 다. 오늘 은 시간 을 내 서 예전 회사 에서 자동 화 된 작은 스 크 립 트 를 여러분 에 게 공유 하 겠 습 니 다.
모두 가 토로 하 는 것 을 환영 합 니 다.
스 크 립 트 실행 의 기본:
1: 한 기 계 를 위주 로 하고 당신 이 관리 해 야 할 모든 기계 와 신뢰 관 계 를 맺 는 다 (ssh 방식 의 인터넷 에는 많은 방법 이 있 으 니 나 는 여기 서 말 하지 않 겠 다).
2: nginx 서비스 에서 프로필 다운 로드 를 지원 하 는 폴 더 를 설정 하 는 것 이 좋 습 니 다. (배포 할 패 키 지 를 넣 을 수 있 습 니 다)
3: 스 크 립 트 의 운행 필요 조건 에 따라 사용자 의 집 디 렉 터 리 에 [. lshost / server list] 를 구축 하고 server lis 는 회사 의 자산 관리 플랫폼 과 결합 할 수 있 습 니 다.
스 크 립 트 코드:
#!/bin/bash
exit_with_help()
{
    echo "Usage: lshost [OPTION] PATTERN
        Options:
            -u           ;
            -c         ;
            -e     ,       \${flag}           (eg:jw_1)
            -s         
            -h        ;
        eg:     lshost -u -c 'ls' 'jw_.*'
        eg2:    lshost -e -c 'grep '\''jw'\'' /home/jw'  'wsw_1'
        "
    exit 0
}
#    
uniq="false"
expand="false"
cmd=""
pattern=""
static="false"
while getopts ":usec:h" optname
    do
        case "$optname" in
            "u")
                uniq="true";
                ;;
            "c")
                cmd="$OPTARG"
                ;;
            "e")
                expand="true"
                ;;
            "s")
                static="true";
                ;;
            "?")
                echo "Unkown option $OPTARG"
                exit_with_help;
                ;;
            ":")
                echo "No arugument value for option $OPTARG"
                exit_with_help;
                ;;
            "h")
                exit_with_help;
                ;;
            "*")
                echo "Unsupported option [$optname]"
                exit_with_help;
                ;;
        esac
    done
pattern=${@:$OPTIND}
if [ -z "$pattern" ];
then
    echo "Pattern must be given"
    exit_with_help;
fi
if [ -f ~/.lshost/serverlist  -a $static == "false" ];
then
    rm -f ~/.lshost/serverlist
   wget -q 'http://{IP}/serverlist' -P ~/.lshost
fi
servers=`grep -E "$pattern" ~/.lshost/serverlist `
if [ $uniq == "true" ];
then
    servers=`echo $servers|awk -F '@' 'BEGIN{RS=" "}{dict[$2]=$1}END{for(i in dict){print dict[i]"@"i}}'`
fi
if [ -z "$cmd" ];
then
    for i in $servers;
    do
        echo $i
    done
else
    for i in $servers;
    do
        host=`echo $i |awk -F'@' '{print $2}'`
        server=`echo $i |awk -F'@' '{print $1}'`
        if [ $expand == "true" ];
        then
            real_cmd=`echo "${cmd}"|sed 's/${flag}/'${server}'/g'`
        else
            real_cmd=$cmd
        fi
        echo -n $i":    "
        echo -e "\e[0;34;1m[$real_cmd]\e[0m"
        ssh -p 22 root@$host   "$real_cmd" &>~/.lshost/stdout
        if [ $?  -ne 0 ];
        then
            echo -e "\e[0;31;1m[FAIL]\e[0m";
        else
            echo -e "\e[0;32;1m[OK]\e[0m";
        fi
        cat ~/.lshost/stdout
        echo "=============================================="
    done
fi

좋은 웹페이지 즐겨찾기