Base/OS, Network

Linux crontab

findmypiece 2021. 4. 2. 22:23
728x90

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

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

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

crontab -l

 

crontab 을 등록하려면?

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

crontab -e

 

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

sudo crontab -e

 

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

sudo EDITOR=vim crontab -e

 

만약 매시 30분 마다 test.sh 라는 쉘을 실행시키고 싶다면 아래와 같이 입력하고 저장하면 된다.

/usr/local 이 PATH에 등록되어 있다면 그냥 test.sh 로 호출해도 된다.

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

 

스케줄은 어떻게 설정?

* * * * * 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

 

/dev/null 2>&1 의미

shell(#mode)에서 간단하게 명령어를 통해 테스트를 진행하면서 "/dev/null 2>&1"의 의미를 알아봅니다. 아래 명령어는 표준 출력을 /dev/null로 redirection 하라는 의미로 표준출력을 버리라는 의미입니다.

jybaek.tistory.com

 

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

crontab 작업을 확인하거나 삭제하고 싶다면?

crontab -e 으로 들어가서 확인하면 되고

삭제는 명령줄을 #으로 주석처리 하거나 아예 삭제해버리면 된다.

728x90

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

Linux crontab  (0) 2021.04.16
운영체제  (0) 2021.04.02
CPU 스케줄링  (0) 2021.04.02
L4, L7 스위치 정리  (0) 2021.04.02
ssh-keygen  (0) 2021.04.02