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초 동안에 안되는 경우는 거의 없겠지만 사용자가 있다거나 그러면 정상동작하지 않을 수도 있습니다.


블로그 이미지

iVPS 영은파더♥

가상서버호스팅 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 에서 알아서 배열로 넘어갑니다.


블로그 이미지

iVPS 영은파더♥

가상서버호스팅 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 로 해야 에러가 안나는군요~


블로그 이미지

iVPS 영은파더♥

가상서버호스팅 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


블로그 이미지

iVPS 영은파더♥

가상서버호스팅 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]


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


블로그 이미지

iVPS 영은파더♥

가상서버호스팅 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


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


블로그 이미지

iVPS 영은파더♥

가상서버호스팅 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 명령어를 나열해서 작성하시면 됩니다.



블로그 이미지

iVPS 영은파더♥

가상서버호스팅 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은 계산시 꼭 필요하다.


블로그 이미지

iVPS 영은파더♥

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

댓글을 달아 주세요