회사/과제

CronTab 을 사용해 Shell Script 실행

H E E 2022. 1. 26. 18:01
728x90

진행OS

KT Cloud 사용

 

준비물

 1. 서버 1대

 

 2. MySQL 설치 환경

    ㄴ테스트를 위해 하나 이상의 Database가 필요합니다.

        (포스팅에서는 DB Dump 백업을 예시로 진행하였습니다. / DB Dump 백업이 아니라면, DB가 굳이 없어도 됩니다.)

 

 3. HTTPD(Apache) 설치 환경

   ㄴ포스팅에서는 웹소스 백업을 예시로 진행하였습니다. / 웹소스 백업이 아니라면, Apache가 굳이 없어도 됩니다.


📌 Shell 이란?

 - 쉘은 운영체제 상에서 사용자가 입력하는 명령어를 읽고 해석하여 대신 실행해 주는 프로그램이다.

 - 운영체제의 커널과 사용자 사이를 이어주는 역할을 한다.

 - Linux에서 사용하는 쉘(Shell)의 종류

종류 풀명칭 프롬프트 경로
bash Bourne-Again Shell # /bin/bash
sh Bourne Shell $ /bin/sh
csh C Shell % /bin/csh
ksh Kron Shell $ /bin/ksh
tcsh TENEX C Shell > /bin/tcsh

 

📌 Shell Script란?

 - 쉘에서 사용할 수 있는 명령어들의 조합을 모아서 만든 배치(batch) 파일

 - 운영체제의 Shell을 이용하여 한줄씩 순차적으로 읽으면서 명령어들을 실행 시켜주는 인터프리터 방식의 프로그램

 

📌 Crontab이란?

 - 스케줄링을 관리하는 프로그램

 - 사용자가 작성한 스크립트나 명령을 일정 주기나 시간마다 실행할 수 있도록 해주는 역할

 - 백업 시스템이나 데이터베이스 관리, 기타 반복적인 업무를 간편하게 등록할 수 있다.

 - 사용 예시 ( 매주 일요일(0) 매시간 30분마다 test.sh를 실행 )

분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-6) 사용자 실행 명령어
30 * * * 0 root /home/test/test.sh

 

📌 Shell Script 를 이용한 백업

 

1. 필요한 디렉토리 및 파일 생성

# 디렉토리와 파일 이름은 자유롭게 설정한다.

# 테스트를 진행할 디렉토리 생성
# mkdir /[지정할경로]/[만들디렉토리]
mkdir /home/backup

# backup 디렉토리 안에서 mysql과 web 소스를 저장하는 
# 디렉토리를 추가로 생성한다.
mkdir /home/backup/sqlBackup
mkdir /home/backup/webBackup

# /backup 디렉토리 안에 .sh 파일과
# 테스트를 위해 필요한 .html 파일을 만든다.
# 빈 파일을 만들기 위해 touch로 진행했지만, 바로 내용을 채우려면
# vi 편집기를 이용해도 좋다.
touch backupTest.sh
touch index.html

 

2. index.html 파일 내용을 아무렇게나 입력

# vi 편집기로 파일을 수정한다.
# vi [경로]/index.html
vi /home/backup/index.html

# ---- vi 편집
Test Backup

# 저장 후 종료
:wq

 

3. backupTest.sh 파일 수정

# 아래 내용처럼 추가한다.
#!/bin/sh

date=`date +"%Y-%m-%d %H시%M분%S초"`

# 파일 이름으로 사용될 날짜
backup_date=`date +"%Y%m%d%H"`

# 백업한 파일을 담을 디렉토리 경로
sql_backup_dir="/home/backup/sqlBackup"
html_backup_dir="/home/backup/webBackup"

# 백업할 Web 소스의 위치
backup_file=/home/backup/index.html

# Web 소스를 백업할 파일의 이름은 test_[날짜].tar.gz로 설정
# 길이가 길어서 변수에 미리 지정
backup_html_name=${html_backup_dir}/test_${backup_date}.tar.gz

# tar 파일로 만들기
# tar 파일의 이름은 backup_html_name 변수에 있는 이름으로 하며
# 백업될 파일은 backup_file에 설정된 것으로 지정
tar zcvf ${backup_html_name} ${backup_file}

# mysql
# mysqldump -u[유저이름] -p[비밀번호] [DB이름] > [백업경로]/[파일이름].sql
mysqldump -uroot -pth0611@! testdb > ${sql_backup_dir}/test_${backup_date}.sql

# echo의 경우 crontab으로 실행할 때 뜨지 않음.
# 테스트를 위해서 직접 명령어로 실행해보거나
# sh 파일이 있는 곳에서 ./test.sh 로 실행 가능
# echo 를 이용해 html에 아래 내용을 넣는 형식으로 해볼 수도 있을 것이다.
echo "백업 되었습니다. /  현재 시각: ${date}"

exit 0

 

4. crontab 설정

# 수정 위치
vi /etc/crontab

# 파일 맨 아래 부분에 아래 내용을 추가
# 분 시 일 월 요일   유저이름    경로(실행할 것)
#  *  *  *  *   *     root     [경로]/[파일이름].sh
# 위 설정대로 한다면 1분마다 실행

# 아래는 매시간 0분에 실행
# 쉽게 말하면 1시간 간격
0 * * * * root /home/backup/test.sh

 

5. 권한 설정 및 crond 재실행

# 권한설정
chmod -R 755 /[경로]/[파일명].sh

# crond 재실행
systemctl restart crond

 

6. 로그 확인

# 로그 경로
cat /var/log/cron

# grep을 이용하여 디렉토리 이름으로 로그를 찾으면
# 더 쉽게 찾아볼 수 있습니다.
cat /var/log/cron | grep backup

 

7. 실제로 시간이 지나고 제대로 적용이 되었는지 확인했다.

 - 매 시간 00분에 shell script에서 지정했던 이름 [test_년월일시.확장자] 로 잘 나온다.

 

 

 

728x90
반응형