주기적으로 반복작업이 수행되게 하고 싶은 경우가 있다.
이럴 때 사용하는 것이 crontab 기능이다.
crontab 설치 여부 확인
ps -ef | grep cron
설치되어 있는 것을 확인할 수 있다.
크론탭 시작
service crond start
크론탭 중지
service crond stop
크론탭 재시작
service crond restart
# CentOS 7 에서
systemctl restart crond.service
현재 설정된 크론탭 확인하는 방법
crontab -l
크론탭 수정하는 방법
crontab -e
실행파일 권한 부여
chmod 100 backup.sh
크론탭 설정시 위치별 의미
* * * * *
* * * * * 수행할 명령어
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ │
│ │ │ │ └───────── 요일 (0 - 6) (0:일요일, 1:월요일, 2:화요일, …, 6:토요일)
│ │ │ └───────── 월 (1 - 12)
│ │ └───────── 일 (1 - 31)
│ └───────── 시 (0 - 23)
└───────── 분 (0 - 59)
예약설정은 분, 시, 일, 월, 요일, 명령어 순으로 설정하면 된다.
용 |
범위 |
|
1 |
분 |
0-59 |
2 |
시 |
0-23 |
3 |
일 |
0-31 |
4 |
월 |
1-12 |
5 |
요일 |
0-7(일요일 :0 또는 7, 월요일 :1, 화요일:2 ...) |
6 |
명령어 |
실행할 명령 |
* crontab 등록 예
출처: http://fruitdev.tistory.com/10?category=554679 [과일가게 개발자]
0 1 15 * * /bin/sh /usr/local/backup_full.sh <== chmod 100 으로 권한 미부여시
0 2 * * * /usr/local/backup_part.sh <== chmod 100 으로 권한 부여시
# 매 5분마다 실행
*/5 * * * * /root/sh/backup_photo.sh
※ 스크립트가 제대로 동작되지 않아서 구글링으로 확인해보니 /bin/sh 를 넣어주면 되는거 같아서 넣어줬더니 제대로 동작된다.
EditPlus 에서 스크립트 파일을 수정하고 동작여부를 확인했더니 계속 문제를 일으킨다.
명령어를 자세하 봤더니 \r 이 붙어있다.
원래 리눅스상에서 작성해야 하는데 편하게 작업하려고 EditPlus 에서 작성하고 수정했더니 문제를 일으켰다.
리눅스 Shell 상에서 dos2unix backup_part.sh 이런 식으로 해주면 \r 정보가 전부 삭제된다.
EditPlus 에서도 파일형식을 Unix 형식으로 저장하는 옵션이 있더라.
유닉스(Unix)/리눅스(Linux)에는, LF (헥사로는 0x0A에 해당) 문자로 줄바꿈을 하고
도스(DOS)/윈도우(Windows)에서는, CR-LF (헥사로는 0x0D 0x0A에 해당) 라는 2문자로 줄바꿈을 하고
맥(Mac)에서는, CR (헥사로는 0x0D 에 해당) 로 줄바꿈한다. "\n" 로 표현한다.
일정기간이 지난 파일을 삭제하는 방법은 find 명령어를 이용하여 삭제하면 된다.
예제 디렉토리가 "/home/tour/log" 라고 했을때 파일 삭제방법은 다음과 같다.
1. 30일이 지난 파일 삭제
find /home/tour/log -mtime +30 -print -exec rm -f {} \;
2. 10분이 지난 파일 삭제
find /home/tour/log -mmin +10 -print -exec rm -f {} \;
3. 30일이상 err_log 로 시작하고 확장자가 txt 파일인것들만 삭제
find /home/tour/log -mtime +30 -name "err_log*.txt" -print -exec rm -f {} \;
4. 파일 사이즈가 1MB 이상인 파일 삭제(KB로 입력)
find /home/tour/log -size +1024k -print -exec rm -f {} \;
# 매시 15분, 45분에 /root/every_30min.sh 를 수행 (하루에 48회[3])
15,45 * * * * /root/every_30min.sh
# 10분마다 /root/every_10min.sh 를 수행 (하루에 144회[4])
*/10 * * * * /root/every_10min.sh
#매일 02:00에/root/backup.sh 를 수행 (하루에 1회)
0 2 * * * /root/backup.sh
# 매 6시간마다 수행(00:30, 06:30, 12:30, 18:30)
30 */6 * * * /root/every_6hours.sh
# 1시부터 매 6시간마다 수행(01:30, 07:30, 13:30, 19:30)
30 1-23/6 * * * /root/every_6hours.sh
# 평일(월요일~금요일) 08:00
0 8 * * 1-5 /root/weekday.sh
# 주말(일요일, 토요일) 08:00
0 8 * * 0,6 /root/weekend.sh
'리눅스' 카테고리의 다른 글
crontab 을 이용한 PHP 스케줄링 작업 (0) | 2016.05.30 |
---|---|
아파치 날짜별로 로그기록 남기기 (0) | 2016.05.14 |
아파치 디렉토리 보이는 것 막기 (0) | 2016.04.20 |
timezone 에러 발생시 php.ini 설정에 추가 (0) | 2016.03.17 |
SSH 설치정보 확인 및 SSH chroot 설정 (0) | 2015.07.27 |