예약설정에 관한 명령어에 대해 정리하려고 합니다.
서버를 운영하게 되면 시스템을 주기적으로 백업하거나 주기적으로 일정 작업을 해주어야 할 때가 있습니다.
주기적으로 반복 설정을 해주어야 하는 일은 cron 명령어를, 한 번만 실행할 작업은 at 명령어를 통해 설정을 할 수 있습니다.
주기적으로 반복되는 일을 설정하는게 "cron" 명령어
관련된 데몬(서비스)은 "crond", 관련 파일은 "/etc/crontab"
/etc/crontab 예
01 ****root run-parts /etc/cron.hourly >>> 매시간 1분에 /etc/cron.hourly 디렉터리 안에 있는 명령들을 자동실행
02 4***root run-parts /etc/cron.daily >>> 4시 2분에 /etc/cron.daily 디렉터리 안에 있는 명령들을 자동실행
03 4**0root run-parts /etc/cron.weekly >>> 매주 일요일 4시 3분에 /etc/cron.weekly 디렉터리 안에 있는 명령들을 자동실행
42 41**root run-parts /etc/cron.monthly >>> 매월 1일 4시 42분에 /etc/cron.monthly 디렉터리 안에 있는 명령등를 자동실행
at : cron은 주기적으로 반복되는 작업을 예약하는 것이지만, at는 일회성 작업을 예약을 하는 것입니다.
ex) 예약 : # at <시간>
# at 3:00am tomorrow >>> 내일 새벽 3시
# at 11:00pm January 30 >>> 1월 30일 오후 11시
# at now + 1hours >>> 1시간 후
at> 프롬프트에 예약명령어 입력 후 [Enter]
완료되면 Ctrl+D
확인 # at -l
취소 # atm <작업번호>
실습 <cron을 활용하여 매월 15일 새벽 3시 1분에 /home디렉터리와 그 하위 디렉터리를 /backup 디렉터리에 백업하는 방법을 익힌다.
<at의 사용법을 익힌다>
cron을 쓰려면 cron 서비스가 백그라운드에서 먼저 실행되고 있어야 하기 때문에 도는지 확인해야 합니다.
해당 사항은
# systemctl status crond
로 확인할 수 있습니다.
이제 /etc/crontab 경로에 들어가서 cron 명령을 설정해 주어야 합니다.
vi 에디터로 해당 경로로 들어가 수정을 합니다.
01 3 15 * * root run-parts /etc/cron.monthly
를 다음과 같이 입력하면 됩니다. (한 칸 띄워도 두 칸 띄워도 무방합니다.)
이제 cron 설정은 해주었으니 /etc/corn.monthly 디렉터리에서 실행시킬 명령을 입력해주어야 합니다.
# cd /etc/cron.monthly
# ls -l
아래와 같이 아직 아무 명령도 없습니다.
이제 vi 에디터를 이용해서 매달 실행시킬 명령을 입력하겠습니다.
쉘 스크립트를 활용해서 실행시킬 명령어를 입력해야 합니다.
매달 /home 폴더와 /backup 에 만들어질 백업 폴더를 백업하는 명령을 내리려고 합니다.
#vi mybackup,sh
vi 에디터에서 다음과 같이 입력합니다.
#! bin/sh
set $(date)
fname="backup- $2$3.tar.xz"
# $2$3 는 상대참조입니다. $2 -> 바뀌는 월 $3 -> 바뀌는 일(주석처리)
tar cvJ /backup/$fname /home
# c 압축 v경로 J xz확장자로 압축
wq
입력을 하고 빠져나와서 확인해보면 mybackup.sh 라는 실행파일이 생성되었습니다.
실행파일을 만들고 이전에 cron 명령을 입력해주었으므로 백그라운드에서 crond 를 재시작시켜줘야지 해당 명령이 적용이 됩니다.
# systemctl restart crond
이제 해당 .sh 파일이 명령을 수행하려면 해당 파일에 대한 실행 권한이 있어야 하므로
# chmod ugo+x mybackup.sh
로 실행 권한을 주고
# ls -ㅣ
로 확인해보면
mybackup.sh 파일에 실행권한이 부여된 것을 확인할 수 있습니다.
이제 강제로 날짜를 변경해서 해당 명령을 실행시켜 보려 합니다.
# date 061503002017
6월 15일 03:00 2017년 (월 일 시 분 년도)으로 강제로 날짜를 변경하는 명령입니다.
해당 명령 실행 후 crond를 역시 재시작 해줘서 변경사항을 적용시킵니다. (아래 화면에서 잘못 입력한 건 안비밀..ㅜㅜ)
# systemctl restart crond
# date
로 현재 시각을 확인하다가 03:01 이 지났을 때 /backup 폴더를 확인해보면
아래와 같이 backup-06.15..tar.xz 파일이 생성되어있음을 확인할 수 있습니다.
이제 확인을 했으므로 다시 시간을 원래대로 재설정해야합니다.
# rdate -s time.bora.net
# date
time.bora.net 이라는 타임서버의 현재시간과 동기화를 시키고 date로 확인해보면 오늘 날짜로 돌아온 것을 확인할 수 있습니다.
여기까지 cron 명령어로 백업파일을 만들고 확인까지 해보았습니다.
이제 마지막으로 at명령을 정리하도록 하겠습니다.
내일 오후 4시에 한 번 실행하는 명령을 at 명령으로 입력해보았습니다.
# at 4:00 pm tomorrow
at > yum -y update
at > reboot
at > Ctrl+D 라고 입력하면 <EOT> 라고 뜨면서 입력이 완료된 것입니다.
# at -l
명령으로 확인해보면 1개의 명령이 예약되었음을 확인할 수 있습니다.
이제 해당 명령을 취소하려면 atrm + 명령번호 를 입력하면 됩니다. 현재 명령은 1번 명령밖에 입력되지 않았으므로
# atrm 1
으로 명령을 취소하고
# at -l
로 재확인을 해보면
다음과 같이 예약된 at 명령이 없는 것을 확인할 수 있습니다.
이렇게 cron, at 명령을 활용해서 백업파일과 단발적인 명령을 예약하는 법을 배웠습니다.
다음에는 네트워크 관련 개념과 명령어, SELinux 에 관해 포스팅하도록 하겠습니다.
'Work-udy > CentOS_Network' 카테고리의 다른 글
[CentOS - 센토스 리눅스] 15. 네트워크 보안을 위한 SELinux (0) | 2017.06.18 |
---|---|
[CentOS - 센토스 리눅스] 14. 네트워크 관련 개념과 명령어 (0) | 2017.06.18 |
[CentOS - 센토스 리눅스] 12. 시스템 설정 system setting (0) | 2017.06.17 |
[CentOS - 센토스 리눅스] 11. 파일 위치 검색, find 및 기타 검색 명령어 활용하기 (0) | 2017.06.17 |
[CentOS - 센토스 리눅스] 10. 파일 압축과 묶기, tar 명령어 사용법 (0) | 2017.06.17 |