CentOS 웹서비스 start stop 쉘스크립트



굳이 아파치랑 NGINX 를 시작 및 종료를 해주는 스크립트가 필요할까 싶지만, Let's encrypt 인증서 갱신시 웹서비스 포트가 사용중이면 갱신이 안되는 문제점이 있습니다.


pstree 로 웹서비스가 완전히 종료 되었는지 확인하고 종료되는 쉘스크립트입니다.


무한루프에 빠질수도 있기때문에 20초로 제한걸었습니다.


#!/bin/sh



CMD="$1"

LOGFILE="/root/web-service.log"


if [ -e "/usr/bin/systemctl" ] ; then

    WEBCMD1="/usr/bin/systemctl $CMD nginx"

    WEBCMD2="/usr/bin/systemctl $CMD httpd"

else

    WEBCMD1="/sbin/service nginx $CMD"

    WEBCMD2="/sbin/service httpd $CMD"

fi


if [ "$CMD" == "start" ] ; then

    $WEBCMD1 >> $LOGFILE

    $WEBCMD2 >> $LOGFILE

    for i in {1..20}; do

        PSD=`pstree | grep httpd | wc -l`

        if [ $PSD -eq 1 ] ; then

            echo "start" >> $LOGFILE

            break;

        else

            echo "not run" >> $LOGFILE

            sleep 1

        fi

    done

elif [ "$CMD" == "stop" ] ; then

    $WEBCMD1 >> $LOGFILE

    $WEBCMD2 >> $LOGFILE

    for i in {1..20}; do

        PSD=`pstree | grep httpd | wc -l`

        if [ $PSD -eq 0 ] ; then

            echo "stop" >> $LOGFILE

            break;

        else

            echo "running" >> $LOGFILE

            sleep 1

        fi

    done

else

    exit

fi


20초 동안에 안되는 경우는 거의 없겠지만 사용자가 있다거나 그러면 정상동작하지 않을 수도 있습니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

리눅스 쉘스크립트 배열 파싱


행과 열로 이루어진 데이터를 개행과 특정 문자를 기준으로 split 잘라서 배열에 담을 수가 있습니다.

쉘스크립트에서는 개행과 스페이스(공백문자)를 기준으로 배열로 인식합니다.

이 특성을 이용하면 배열로 이용이 가능합니다.

아래는 예제입니다.

#!/bin/sh


ARR_STR="apple,10

        pear,20

        graph,30"


for STR in $ARR_STR ; do

        ROW=`echo $STR | awk -F ',' '{print $1" "$2}'`

        for COL in $ROW ; do

                echo $COL

        done

done

$COL 값이 하나씩 분해된 값입니다.


awk -F '구분문자' '{print $1" "$2" "$3}'

$1 이 첫번째 값이고 $2가 두번째 값입니다.

이 사이를 " " 공백문자를 붙이면 됩니다.

그러면 for in 에서 알아서 배열로 넘어갑니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

쉘스크립트 랜덤 함수



쉘스크립트로 random 함수를 만들어 보았습니다.


nano초를 이용하여 만들었는데 효과가 있는것 같네요~


random 함수에 최소값 최대값 인자를 넣어주면 값을 확인 가능합니다.


#!/bin/bash


function random() {

  MIN=$1

  MAX=$2

  DIF=`expr $MAX - $MIN + 1`

  TIME_N=`date +%N`

  N=`expr $TIME_N % $DIF + $MIN`

  return $N

}


for I in {1..10} ; do

  random 5 10

  echo $?

done


함수 뒤에 공백 기준으로 인자가 $1, $2 로 받아들입니다.


위의 스크립트로 한번 테스트 해보세요~



CentOS 는 #!/bin/sh 로 function 정의시 되는데


Ubunto 는 #!/bin/bash 로 해야 에러가 안나는군요~


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

리눅스 쉘스크립트 문자열 치환



쉘스크립트에서 문자열을 치환하려면 for 문을 돌려서 치환 하던가 아니면 리눅스 명령어 sed 를 활용하면 됩니다.


예제는 php 에서 implode 함수와 비슷한 기능을 하는 예제입니다.



▶ 배열인 경우


ARR_A=(1 2 3 4 5)

ARR_C=`echo ${ARR_A[@]} | sed -e "s/ /,/g"`


echo $ARR_C


결과 값은 1,2,3,4,5 입니다.



▶ 문자열인 경우


ARR_B="1 2 3 4 5"

ARR_C=`echo $ARR_B | sed -e "s/ /,/g"`


echo $ARR_C


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

리눅스 쉘스크립트 배열 비교



두개의 배열을 비교 및 추가, 삭제 출력하는 방법에 대해서 알아보겠습니다.


배열의 길이는 ${#변수명[*]} 입니다. * 대신에 @ 를 사용해도 됩니다.


배열의 값 가져오는 방법은 ${변수명[0]} 이렇게 하면 첫번째 값을 가져옵니다.


#!/bin/sh


ARR_A=(1 2 3 4 5)

ARR_B=(1 2 3 5 5)


CNT=${#ARR_A[*]}

for ((i=0; i<$CNT; i++))

do

        if [ ${ARR_A[$i]} -ne ${ARR_B[$i]} ] ; then

                echo ${ARR_A[$i]}" != "${ARR_B[$i]}

        else

                echo ${ARR_A[$i]}" == "${ARR_B[$i]}

        fi

done


대충 보시면 분석이 가능할 겁니다.



▶ 배열 출력


echo ${ARR_A[@]}



▶ 배열 추가


ARR_A[${#ARR_A[*]}]=6



▶ 배열 삭제


unset ARR_A[0]


첫번째 요소를 지우는 의미입니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

쉘스크립트 for 반복문 사용방법



for loop 사용 예제입니다.


숫자를 이용하는 방법과 배열을 이용하는 방법이 있습니다.



▶ 나열된 숫자를 이용하는 방법


#!/bin/sh


for i in 1 2 3 4 5

do

        echo $i

done



▶ 숫자 from ~ to 를 이용하는 방법


#!/bin/sh


for i in {1..5}

do

        echo $i

done



▶ 배열을 이용하는 방법


#!/bin/sh


alphabet="a b c d e"

for c in $alphabet

do

        echo $c

done


필요에 따라 편한 방법을 사용하면 됩니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

쉘스크립트로 FTP 사용방법



쉘스크립트로 ftp 를 사용하는 방법입니다.


#!/bin/bash


FTP_SERVER="FTP주소"

FTP_USER="계정아이디"

FTP_PASS="계정비번"


{

echo user ${FTP_USER} ${FTP_PASS}

echo bi

echo put test.bin

echo bye

} | ftp -i -n -v ${FTP_SERVER}


ftp 주소와 아이디, 비밀번호를 작성한 다음에

그리고, echo 로 ftp 명령어를 나열해서 작성하시면 됩니다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

리눅스 쉘스크립트 비교연산자



비교연산자에 대해서 알아보자.


숫자 및 문자열 비교 그리고 파일 및 디렉토리 속성 및 존재여부를 비교할 수 있다.


그리고 if 조건문, case 분기문, for 및 while 반복문에 대해서도 알아보자.


▶ 비교연산자


숫자 비교

-eq

같다

if [ $VAR1 -eq $VAR2 ]

-ne

다르다

if [ $VAR1 -ne $VAR2 ]

-gt

크다(초과)

if [ $VAR1 -gt $VAR2 ]

-ge

같거나크다(이상)

if [ $VAR1 -ge $VAR2 ]

-lt

작다(미만)

if [ $VAR1 -lt $VAR2 ]

-le

같거나작다(이하)

if [ $VAR1 -le $VAR2 ]


문자열 비교

-n

문자열이 null 이 아니면 true

if [ -n "$STRING" ]

-z

문자열이 길이가 0 이면 true

if [ -z "$STRING" ]

=, ==

문자열이 같으면 true

if [ "$STRING1" == "$STRING2" ]

!=

문자열이 다르면 true

if [ "$STRING1" != "$STRING2" ]


기타

-r

파일 속성이 읽기 가능한지 true

if [ -r "$FILEPATH" ]

-w

파일 속성이 쓰기 가능한지 true

if [ -w "$FILEPATH" ]

-x

파일 속성이 실행 가능한지 true

if [ -x "$FILEPATH" ]

-s

파일 사이즈가 0 이상이면 true

if [ -s "$FILEPATH" ]

-d

해당 디렉토리가 존재하면 true

if [ -d "$FILEPATH" ]

-f

해당 파일이 존재하면 true

if [ -f "$FILEPATH" ]

-h

해당 파일이 링크파일이면 true

if [ -h "$FILEPATH" ]

!

조건이 반대이면 true

if [ ! -r "$FILEPATH" ]


AND 및 OR

-a

AND 조건

if [ -r "$FILEPATH" -a -w "$FILEPATH" ]

-o

OR 조건

if [ -r "$FILEPATH" -o -w "$FILEPATH" ]



다음에는 조건문에 대해서 알아보자.


▶ if 조건문


#!/bin/sh


VAR=3


if [ $VAR -eq 1 ] ; then

        echo 1

elif [ $VAR -eq 2 ] ; then

        echo 2

elif [ $VAR -eq 3 ] ; then

        echo 3

else

        echo -1

fi



▶ case 분기문


#!/bin/sh


VAR=3


case $VAR in

        1)

                echo 1;;

        2)

                echo 2;;

        3)

                echo 3;;

        *)

                echo -1;;

esac


STR="blue"


case "$STR" in

        "red")

                echo "Red";;

        "green")

                echo "Green";;

        "blue")

                echo "Blue";;

        *)

                echo "Default";;

esac



▶ for 반복문


#!/bin/sh


for VAR in {1,2,3,4,5}

do

        echo $VAR

done


for USER in `ls /home`

do

        echo $USER

done



▶ while 반복문


#!/bin/sh


VAR=10


while [ $VAR -gt 0 ]

do

        echo $VAR

        VAR=`expr "$VAR" "-" "1"`

done


expr은 계산시 꼭 필요하다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,