본문 바로가기

리눅스(Linux)/실습

[리눅스] Crontab : 매월 15일 새벽 4시에 web서버 자동 백업 및 백업 파일명에 백업 날짜 자동 기입 (+ at 명령어)

반응형

 

# cron 이란?

주기적으로 반복되는 일을 자동으로 실행할 수 있도록 시스템 작업을 예약 해놓는 것

 

 

 

#실습

 

# 시간 설정을 위해 관련 패키지 설치

wget http://download.hanbit.co.kr/centos/8/openrdate-1.2-14.fc30.x86_64.rpm

dnf -y install openrdate*.rpm  # 관련 패키지 설치

 

 

 

# crontab 설정

cd /etc
vi crontab
############################## vi /etc/crontab ##########################################

00 04 * * * * root cp -r /home /backup   # 백업만 되고, 백업파일명 지정 불가능

##########################################################################################

 

아래와 같이 시간, 분, 일, 월에 대한 설정이 가능하다.

 

분, 시, 일, 월, 요일, 사용자, 실행명령

systemctl status crond.service  # 현재 cron 상태 확인

systemctl restart crond.service # cron 작업 내용 변경 후 리스타트 해줘야지 적용됨 

cd /

ls > 여기에 백업 파일 생길 것

systemctl status crond.service로 현 상태 확인(enable로 이미 켜져있음)
설정한 시간 전 / backup 폴더 없음
설정한 시간 이후 / backup 폴더 생긴 것 확인 가능

 

설정한 시간이 되니 backup 폴더 생긴 것 확인 가능

 

cd /etc 

ls cron*

 

 

 

# 단순 백업이 아니라 백업파일명도 설정

# 시간별, 일별, 주별, 월별 설정 가능

 

# run-parts 디렉터리 : 디렉터리 안의 명령을 모두 실행
# 분, 시, 일, 월, 요일, 사용자, 실행명령

01 * * * * root run-parts /etc/cron.hourly   # 매시간 1분에 /etc/cron.hourly 디렉토리 안의 명령들을 자동 실행
02 3 * * * root run-parts /etc/cron.daily   # 매일 3시 2분에 /etc/cron.daily 안의 명령들을 자동 실행
03 3 * * 0 root run-parts /etc/cron.weekly   # 매주 일요일 3시 3분에 /etc/cron.weekly 안의 명령들을 자동 실행
04 3 1 * * root run-parts /etc/cron.monthly   # 매달 1일 3시 4분에 /etc/cron.monthly 안의 명령들을 자동 실행

 

 

# 매월 같은 시간에 백업파일 설정(crontab)

# 정해진 일시에 해당 폴더 안 모든 명령어 실행 명령어 추가

vi /etc/crontab
############################# vi /etc/crontab ##########################
01 4 15 * * root run-parts /etc/cron.monthly    # 매월 15일 새벽 4시 1분에 monthly 안 명령어 모두 실행
########################################################################


# 해당 폴더 안 자세한 설정 사항 추가(myBackup)
cd /etc/cron.monthly/
touch myBackup.sh
chmod 755 myBackup.sh   #작동은 crond가 하는거니까 back.sh에 x 권한(실행권한)이 있어야한다.
ls -l

vi myBackup.sh
############################# vi myBackup.sh ###########################
#!/bin/sh

set	$(date)
fname="backup-$2$3tar.xz"   # 생성될 백업 파일명 설정

tar cfJ /backup/$fname /home
########################################################################


# 백업용 디렉토리 생성, crond 데몬 재시작
mkdir /backup
systemctl restart crond


# 한달 기다리기 지루하니 컴퓨터 날짜를 강제로 바꾸고 테스트해보기
date 011504002027    # 01월 15일 04시 00분 2027년으로 날짜 변경
systemctl restart crond    # 실행 후 1~2분 대기
ls -l /backup
date 021504002027    # 02월(한달 뒤)로 날짜 변경
systemctl restart crond    # 실행 후 1~2분 대기
ls -l /backup

 

 

 

더보기

 # 시간 폴더에 설정

cd cron.hourly/     # 시간
ls -l      # 0anacron 권한 확인
chmod 644 0anacron    # 0anacron 권한 변경
ls      # 변경된 권한 확인
권한 644 로 변경 전 0anacron 상태
권한 644 로 변경 후 0anacron 상태

 

vi back.sh


######################## vi back.sh  내용 ######################

#!/bin/sh

set $(date)
fname="backup-$2$3tar.xz"     #날짜에서 해당 일,월을 가져와서 파일명을 만들어라.

tar cfJ /backup/$fname /home  

################################################################


ls -l  
chmod 755 back.sh    #작동은 crond가 하는거니까 back.sh에 x 권한이 있어야한다.
ls -l
권한 변경 내용 확인

 

 

 

# 백업파일에 요일시간 붙이기

vi *.sh     # back.sh 파일 수정


######################## vi back.sh  내용 #########################

#!/bin/sh

set $(date)
fname="backup-$2$3$4$5.tar.xz"     #날짜에서 해당 일,월,요일,시간을 가져와서 파일명을 만들어라.

tar cfJ /backup/$fname /home  

###################################################################


sh ./back.sh    # 실행
ls /backup   # 생긴 파일 확인

#rm -rf /backup/*    # 백업 폴더 밑의 모든 파일 삭제

bash.sh 내용
생긴 결과 파일

 

 

# crontab 설정 : 매 시간마다 백업 설정

vi crontab
###################################################
10 * * * * root run-parts /etc/cron.hourly     # 매시간 10분 마다 백업 실행
# 분, 시, 일, 월, 요일, 사용자, 실행명령
###################################################

systemctl restart crond
# systemctl restart crond.service # cron 작업 내용 변경 후 리스타트 해줘야지 적용됨 

ls -l /backup                 # 10분 후 백업 된 내용 확인

 

/etc의 vi crontab

 

 

 

# 원하는 모양의 폴더 날짜 만들기

#back.sh 수정

vi 내용

 

echo $1 $2 $3 $4 $5 $6 이라 해도 됨

 

echo 명령어 > print와 비슷. 터미널 창에 출력을 해본다. 원하는 모양의 연월시 파일을 만들기 위해서

vi 나와서 sh./back.sh 실행하면 결과 출력

출력값

 

 

echo로 나온 결과값 바탕으로 다시 vi 파일 수정

 

vi 내용

 

결과값

 

 

 

 

 

*at 명령어(일회성 예약 작업 실행 후 소멸)

at 11:30pm January 30   # 1월 30일 오후 11시
at 3:00am tomorrow    # 내일 새벽 3시
at now + 1 hours    # 지금으로부터 1시간 후

at> cp -r /home /back2    # home폴더의 내용을 back2폴더로 옮겨라
at> ctrtl + d     # 나가기 : ctrtl + d

at> (enter)
완료되면 ctrl + D
at -l   # 설정한 at명령어 확인
# atrm 작업번호   # at명령어 취소

 

 

 

# 내일 새벽 4시에 시스템을 최신 패키지로 업데이트, 완료되면 시스템 재부팅 예약, 예약 내용 삭제

(at명령어)

rdate -s time.bora.net
at 4:00 am tomorrow
dnf -y update
reboot
(ctrl + d)    # 작업예약 완료
at -l      # 제일 앞에 출력되는 번호가 작업번호
atrm 작업번호   # 작업 삭제
at -l

 


 

오늘은 crontab을 활용하여 특정 기간(예. 매월 15일 새벽 4시)에 맞춰서 서버 자동 백업을 예약하는 방법을 배워보았습니다. 추가로 at 명령어에 대해서도 알아보았습니다. 잘 활용해보시기 바랍니다. 감사합니다. 

반응형