Base/OS, Network

Linux crontab

findmypiece 2021. 4. 16. 08:10
728x90

어떠한 작업을 일정주기로 반복적으로 수행하게 해준다.

/usr/local/test.sh 라는 쉘파일이 있고 그걸 수행시킨다고 가정하고 정리한다.

현재 등록되어 있는 crontab 을 확인하려면?

crontab -l

crontab 을 등록/수정/삭제 하려면?

아래와 같이 입력하면 수행할 명령을 입력할 수 있는 vi편집기가 호출된다.

crontab -e

그곳에 아래와 같이 스케줄을 포함한 명령을 행 단위로 등록하면 된다.

삭제는 그냥 삭제하거나 #로 주석처리하면 된다.

30 * * * * /usr/local/test.sh

 

만약 수행할 작업이 root 권한이 필요한 작업이라면?

sudo crontab -e

 

편집기를 반드시 vim으로 띄우고 싶다면?

sudo EDITOR=vim crontab -e

 

스케줄은 설정 예시

* * * * * 1분 마다 실행 
30 * * * * 매시 30분마다 실행 
0 0 10 * * 매월 10일 0시 0분에 실행 
* * 10 * * 매월 10일에 1분 마다 실행 
0 0 10 4 * 매년 4월 10일에 0시 0분에 실행 
0 0 * * 1 매주 월요일 0시 0분에 실행 (요일의 숫자표현: 일0 월1 화2 수3 목4 금5 토6) 
0 * * * 1 매주 월요일 매시 0분에 실행

 

로그를 남기고 싶다면?

수행여부 자체는 시스템로그에 남는다. (Ubuntu 기준 /var/log/syslog)

하지만 실제 작업이 수행되면서 발생시키는 출력은 따로 기록을 해줘야 한다.

아래와 같이 하면 매일마다 그 날짜에 맞는 /log/crontab_log_20200402 라는 파일이 생성되고

그곳에 로그가 기록된다.

/usr/local/test.sh >> ~/log/crontab_log_`date +\%Y\%m\%d`.log

 

로그를 남기고 싶지 않다면?

아래와 같이 하라고들 하는데 이게 무슨 의미가 있나 싶기는하다..

어차피 /usr/local/test.sh 뒤에 아무것도 입력하지 않으면 기본적으로 로그는 남지 않고

아래와 같이 하더라도 syslog 는 남는 것 같다.

/usr/local/test.sh > /dev/null 2>&1

2>&1 의 의미는 아래 블로그를 참고하자.

https://jybaek.tistory.com/115

 

crontab 에 대한 syslog 를 남기고 싶지 않다면?

/etc/rsyslog.d/50-default.conf 파일을 열어서

*.*;auth,authpriv.none -/var/log/syslog 내용을 아래로 바꿔준다.

*.*;auth,authpriv.none,cron.none -/var/log/syslog

그리고 데몬 재시작 service rsyslog restart

728x90

'Base > OS, Network' 카테고리의 다른 글

NAS  (0) 2021.06.11
port 확인 및 열기  (0) 2021.06.04
운영체제  (0) 2021.04.02
CPU 스케줄링  (0) 2021.04.02
L4, L7 스위치 정리  (0) 2021.04.02