Crontab 이란
crontab은 스케줄링을 관리하는 프로그램으로 시스템 관리자에게 중요한 유틸 중 하나이다. 특정 시간대에 사용자가 작성한 스트립트나 명령을 실행 할 수 있다. 이는 rsync 같은 툴을 같이 사용하여 굉장히 편리한 백업 시스템을 만들 수도 있고 데이터 베이스관리나 기타 반복적인 업무를 간편하게 등록하여 사용 할 수 있다.
MIN HOUR DOM MON DOW CMD
필드 |
명세 |
허용 값 |
MIN |
분 |
0~59 |
HOUR |
시간 |
0~23 |
DOM |
날짜 |
1-31 |
MON |
달 |
1-12 |
DOW |
주 |
0-6 |
CMD |
명령어 |
실행 가능 한 모든 명령어 |
1. 다음 시간 6월 10일 오전 8시 30분
을 cron 명령어에 맞게 작성해보자.
30 08 10 06 * /home/script/backup
-
30: 30분
-
08: 오전 8시 <24시제>
-
10: 10일
-
06: 6월
-
*: 매주
2. 매일 하루 두 번 증분 백업을 하자.
00 11,16 * * * /home/script/incremental-backup
-
00: 0분 (정각)
-
11,16 - 오전 11시 / 오후 4시
-
*: 매일
-
*: 매달
-
*: 매주
3. 특정 시간대에 작업하기
00 09-18 ** 1-5 /home/check-db-status
-
00: 0분 (정각)
-
09-18: 오전 9, 10, 11, 12시 / 오후 1, 2, 3, 4, 5, 6시 마다 작업
-
*: 매일
-
*: 매달
-
1-5: 월, 화, 수, 목, 금 (주중)
4. crontab 작업 목록 보기 (명령어)
$ crontab -l
@hourly /home/script/hourly-script
00 09-18 ** 1-5 /home/check-db-status
$ crontab -u foo -l
no crontab for foo
$ su
# crontab -l
no crontab for root
5. crontab 목록 수정
목록 수정을 vi/vim으로 편집하려면 변수를 선언해줘야 한다. export VISUAL=vim
$ crontab -e
$ crontab -u foo -e
6. 매분마다 작업하기
* * * * * CMD
7. 10분 마다 작업하기
*/10 * * * * /home/script/check-disk-space
0-10/2 * * * * /home/script/check-db-updates-5times
-
*/10의 뜻은 10분 마다
-
0-10/2의 뜻은 처음 10분 동안 2분 간격으로
8. 키워드 사용
Keyword
키워드 |
대치 문법 |
@yearly |
0 0 1 1 * |
@daily |
0 0 * * * |
@hourly |
0 * * * * |
@weekly |
0 0 * * 0 |
@reboot |
시스템 시작 시 |
다음은 키워드를 사용해 매일 반복하는 작업 스케줄링 crontab이다.
@daily /home/script/make-log
9. 메일 사용
crontab 수정시 MAILTO를 선언하면 실행 내용을 메일로 받을 수 있다.
MAILTO="xajax@naver.com"
10. 파일을 통한 crontab 설정
파일로 저장해 놓고 다른 시스템에 재 사용 하고 싶다면 다음과 같이 하면 된다.
$ crontab cron-file.txt
$ crontab -l
이미지 백업, dd
$sudo dd if=대상 of=백업위치
if은 인풋파일, /dev의 장치파일이나 백업하고 싶은 파일을 씁니다.
라즈베리파이의 SD카드는 /dev/mmcblk0 입니다.
of는 아웃풋파일, 백업된 파일을 저장할 위치입니다.
블록사이즈나 블록갯수를 지정하고 싶다면 $man dd를 참고하세요
이미지 압축, gzip, bzip
$gzip 압축할파일
$gzip -d 압축풀파일
-9, --best 옵션은 최대한 압축, -1 --fast 옵션은 빠르게 압축을 합니다. 기본은 -6입니다.
이미지 전송, 넷캣
넷캣 데이터 전송, 터널링 캣
쓸만한 넷캣 사용법
서버$ nc -l 포트번호
클라이언트$ nc 서버이름,IP 포트번호
서버에서 포트를 열어놓으면 클라이언트의 요청이 있을 때까지 대기합니다.
dd, gzip, 넷캣을 합칩니다.
서버$ sudo nohup dd if=/dev/mmcblk0 | gzip -9 | nc -l 5555 &
클라이언트$ nc 서버 5555 > 저장할파일 &
nohup과 마지막의 &은 터미널을 종료해도 백업이 종료되지 않도록 합니다.
dd의 of 옵션을 무시하면 표준출력으로 이미지가 나옵니다. gzip이 표준출력을 읽어 압축합니다.
서버의 명령을 먼저 실행합니다. 클라이언트의 nc 요청이 있을 때까지 서버의 dd와 gzip은 대기합니다.
만약 클라이언트의 cpu가 더 빠르다면 gzip을 클라이언트에서 처리합니다.
서버$ sudo nohup dd if=/dev/mmcblk0 | nc -l 5555 &
클라이언트$ nc 서버 5555 | gzip -9 > 저장할파일 &
같은 방식으로 tar 파일도 처리 가능합니다.
서버$ tar -czf - /압축대상 | nc -l 5555
클라이언트$ nc 서버 5555 > 저장할파일 &
tar 옵션의 두번째 대쉬는 파일이 아닌 표준출력에 데이터를 쓴다는 뜻입니다. nc가 표준출력을 읽습니다.
crontab에 등록하면 자동화된 백업을 만들 수 있습니다.
백업이 되었는지 아니면 문제가 생겼는지 알림을 보내고 싶다면 프로그램 종료시 메일로 결과 보내기를 참고하세요.