태그 Archives: bash

bash 스크립트의 실행 속도(간격) 한계

bash 로 작성된 스크립트의 경우 anacron 혹은 crond 에 의존하여 작동을 한다.

때문에 지정 할 수 있는 최소 시간은 1분이다.

즉 1분에 1회만 실행이 가능하다.

 

필요에 따라 5초 혹은 10초 단위 마다 재 실행 이 가능한 경우가 발생했다. (push 메세지 전송이라든가..)

 

이 한계를 넘기 위해 아래와 같이 작성하여 지정된 $TERM 동안 sleep 을 하고 excute-job 펑션을 재실행 하도록 작성 한다.

1~6 값을 지정함에 따라 알맞은 $TERM을 sleep 하고 재 실행 하게 된다.

bash 에서의 멀티 쓰레드 구현

bash 는 단순히 순차 실행이 되는 구조이기 때문에 일반적으로 싱글 쓰레드로 볼 수 있다 ‘ㅅ’a
하지만 실행속도 향상을 위해 다중실행하는것이 유리 하다면 그렇게 만들면 되겠다 ‘ㅅ’a

리눅스는 기본적으로 프롬프트에서 background 실행을 할수 있다.
보통 백업을 할때 ‘ㅅ’a

 

이걸 응용하여 단순실행용 스크립트와  여러 명령어를 실행하는 스크립트를 두개를 만들어서 구성 해야 하겠지만..

여기서는  list 어레이에 선언된 숫자 값을 각 쓰레드에서 sleep 하는걸로…..
최대 리미트 $th 에 선언된 8의 갯수 만큼 동시실행을 하고 기존 프로세스들이 종료될 경우 추가 실행을 하도록 하였다 ‘ㅅ’a

  1. 백그라운드로 돌아가는 명령어
  2. 이를 확인하는 jabs 명령어
  3. 프로세스 종료를 기다리는 wait 명령어

위와 같은 명령어 조합으로 멀티쓰레드 구현이 간단히 되었다. 🙂

8쓰레드 의 단순 성능향상은 8배 이겠지만 단순히 8개 동시 실행을 하고 먼저 실행된 애들이 종료되면 순차실행을 하기 때문에..
에러이 선언된 시간들은 총 64초 이지만 멀티쓰레드 구현을 했을때에는 14초가 걸릴것이다 ‘ㅅ’a

 

PS. 싱글쓰레드에서 4분 56초 걸리는 작업 ( BIND[named.conf/zone] -> Pdns query )을 멀티쓰레드로 구현했을때 1분 44초가 걸렸다 ‘ㅅ’a

쉘 스크립트의 중복실행 방지를 위해 PID 를 생성.

쉘을 단순 명령어 실행 코드로 짤수 있어서 나같은 초보자들도 쉽게 짤수 있는 프로그래밍

언어이도. 또한 서버 관리를 위해 필수 적으로 익혀야 하기도 하고..

 

그러다보니 양산되는 문제가 짜버린 쉘스크립트 코드가 너무 쉽게 만들어져 버리다 보니까.

중복실행이 되면 안되는 쉘스크립트가 중복실행이 되버릴 경우 심하면 서버 다운까지 간다.

예를 들면 백업이라던가.. awstat 체크 로직이라던가. 등등..

그렇다고 while 로 loop 로 너무 많은 쉘을 돌리는것도 문제이긴 하다.

 

그래서 쉘 스크립트를 싱행하기 전에 PID 파일을 생성하고 실행이 되도록 하고.

pid 파일이 있고 현재 프로세스가 실행중이라면 “이미 실행중’ 메세지가 나오도록 하고

pid만 덩그러니 존재 할경우 기존 pid를 삭제하고 실행 되도록 코드를 짜 보았다.

pid 파일은 해당 쉘의 위치와 동일 선상에 생성 되고 삭제되도록 되어 있다 ‘ㅅ’a

 

ps. 2016-07-21 실행된 pid가 너무 짧을 경우 프로세스 exist 체크에서 다른 프로세스를 검출 하는 경우가 나와서 살짝 업데이트를 했습니다.(4째줄..)


ps2. 2020-02-13 기존 스크립트 코드를 단순화 하고 trap 설정을 통해 상단 선언만 되도록 변경 했습니다.(아래)

 

shellshock 취약점 패치

명령어 실행으로 테스트를 진행한다.

 

 

위와 같이 나온다면 shellshock 취약 하다고 나오면 update가 필요 하겠다 ‘ㅅ’a

 

 

설치 완료후 재 테스트를 하자 ‘ㅅ’a

 

 

CentOS 4 에서는 yum update가 안될것이다 ‘ㅅ’a (OS 버전 확인 ~]# cat /etc/redhat-release )

아래 오라클 사이트에서 배포하는걸 받아서 rpm 명령어로 설치한댜 ‘ㅅ’a
32비트

 

64비트