Shell Script와 서버 작업 자동화
쉘 스크립트를 통한 서버 작업 자동화 및 운영(DevOps)
Why? 왜 필요한가?
서버는 일반적으로 로그파일을 생성한다. 생성 도중 용량 문제 등으로 작업이 중지되어 프로그램이 비정상적인 동작을 하여 다운되었다고 가정했을 때, 어떻게 문제를 해결할 수 있을까?
간단한 쉘 스크립트를 통해 일정 시간이 경과한 로그파일을 자동으로 삭제해주면 저장 공간에 대한 오류는 해결할 수 있다.
쉘 스크립트
쉘 명령어를 기본으로 하되, 몇 가지 문법이 추가된 형태이다.
쉘 스크립트는 filename.sh
형태의 파일로 작성 후, 파일을 실행한다.
기본 문법
파일의 가장 첫 라인은 #!/bin/bash
로 시작한다.
쉘 스크립트 파일은 실행 시 권한을 가지고 있어야한다.
- chmod 777 <FileName>
등과 같이 실행 권한을 부여해준다.
1. 변수
변수명='text'
와 같이 띄어쓰기 없이 입력해준다. text 내의 띄어쓰기는 가능하다.$
기호를 통해 변수임을 알려준다.
1 |
|
2. 배열
변수명=(데이터1 데이터2 데이터3)
과 같이 배열을 선언할 수 있다.${변수명[인덱스번호])
로 배열을 출력할 수 있다.
1 |
|
3. 지역변수
$$
: 쉘의 프로세스 번호, pidls -al -z
를 실행했을 때$0
: 쉘 스크립트 이름 (ls
)$1 ~ $9
: 명령 줄의 인수 ($1
:-al
,$2
:-z
)$*
: 모든 명령줄 인수 리스트 (-al -z
)$#
: 인수의 개수 (2개)$?
: 최근 실행한 명령어의 종료 값- 0 : 성공
- 1 ~ 255 : 에러 메세지
4. 연산
`expr`
: 숫자 계산피 연산자와 연산 기호를 expr 뒤에 붙혀준다.
괄호에는 항상
\
(역슬래쉬)를 붙여주어야한다.
1 |
|
5. 조건문
if
로 시작하여fi
로 끝내준다.값 비교 문법
-z
: 문자가 null이면 true-n
: 문자가 null이면 false-eq
: equal (같으면 참)-ne
: not equal (다르면 참)-lt
: less than-le
: less or equal-gt
: greater than-ge
: greater or equal
파일 검사 문법
-e
: 파일이 존재하면 true-d
: 파일이 디렉토리이면 true-h
: 심볼링 링크파일이면 true-f
: 일반 파일이면 true-r
: 읽기 가능하면 true-s
: 파일 크기가 0이 아니면 true-u
: 파일이 set-user-id가 설정되면 true-w
: 파일이 쓰기 가능 상태이면 true-x
: 파일이 실행 가능 상태이면 true
1 |
|
6. 반복문
for문
for 변수 in 변수값1 변수값 2 ...
로 범위를 설정하고,do
다음 줄에 실행구문을 작성하고done
으로 반복문을 종료한다.ls
를 통해 디렉토리에 있는 모든 파일을 출력해주고 끝내는 반복문
1 |
|
while문
1 |
|
서버에서 쉘 스크립트 사용
ping 명령어를 통해 ip에 요청을 보내고 응답이 돌아올 시 “GateWay ping succeed” 구문을 출력하고, 실패 시 “GateWay ping failed” 구문을 출력하게 하여 서버가 열려있는지 확인할 수 있다.
타 컴퓨터와 협업을 할 때 ping을 통해 확인하고, 성공 시 작업을 수행하게 할 수 있다.
1 |
|
백업하기
두 개의 인자를 받았을 때 null이면 파일을 만들어서 폴더에 넣어주고, 아니면 각각 디렉토리에 날짜를 포함한 이름을 설정하여 저장
압축 명령
tar
: 과게어는 여러 파일을 묶기만 했었지만, 현재는 파일을 묶고 압축할 수 있다.- 주요 옵션
- x : 묶음 해제
- c : 파일 묶음
- v : 묶음 / 해제 과정을 화면에 표시
- z : gunzip 사용
- f : v파일 이름 지정
- 압축 시 주로 사용하는 옵션 :
tar -cvzf [압축파일 이름] [압축할 파일 or 폴더명]
- 해제 시 주로 사용하는 옵션 :
tar -xvzf [압출 해제할 아카이브 이름]
1 |
|
Logfile 정리하기
정책을 먼저 정하고, 그에 따라 파일을 어떻게 관리해줄 것인지 구현한다.
2일이 경과한 log파일은 gz파일로 압축시켜주고, 압축된 지 3일이 경과한 파일은 삭제하도록한다.
find 함수를 통해 아래와 같이 구현할 수 있다.
1 |
|
Shell Script와 서버 작업 자동화
install_url
to use ShareThis. Please set it in _config.yml
.