Written by
Seungwon Seok
on
on
Crontab에 대하여 알아보고 사용해보기
리눅스에서 소프트웨어를 매번 실행시키기 귀찮다면 Crontab을 사용해보자!
Crontab 이란?
-
소프트웨어 유틸리티 cron은 유닉스 계열 컴퓨터 운영 체제의 시간 기반 작업 스케줄러이다.
-
소프트웨어 환경을 설정하고 관리하는 사람들은 작업을 고정된 시간, 날짜, 간격에 주기적으로 실행할 수 있도록 스케줄링하기 위해 cron을 사용한다.
Crontab의 특징
-
cron은 셸 명령어들이 주어진 일정에 주기적으로 실행하도록 규정해놓은 crontab (cron table) 파일에 의해 구동된다.
-
crontab 파일들은 작업 목록 및 cron 데몬에 대한 다른 명령들이 보관된 위치에 저장되어 있다.
-
사용자들은 자신들만의 개개의 crontab 파일들을 가질 수 있으며, 가끔은 /etc 또는 /etc의 하위 디렉터리에 시스템 관리자들만이 편집할 수 있는, 시스템 전반에 영향을 미치는 crontab 파일이 존재하는 경우도 있다.
Crontab 사용해 보기
앞의 설명처럼 Crontab은 일정 시간에 사용자 개입 없이 주기적으로 프로그램이 실행되도록 도와주는 툴이다.
Crontab 에디터에 접근하기 위한 방법은 다음과 같다.
$ crontab -e
- 다음 페이지에서 각종 crontab 명령어를 입력할 수 있고, 저장하지 않고 나갈때는
:
+q
, 저장 후 나갈 때는:
+x
를 통해 쉘로 돌아갈 수 있다.
에디터에 접근하지 않고, crontab 작업 목록만 확인하는 방법은 다음과 같다.
$ crontab -l
- 내용을 cat 명령어로 뿌려준다.
crontab 작업 목록을 초기화하고 싶다면 방법은 다음과 같다.
$ crontab -r
Crontab으로 작업을 생성하는 방법은 다음과 같다.
* * * * * ls -al
- 별이 다섯개 있는 경우엔 매분마다 실행하는 것! 다음은 별에 대한 설명이다.
별은 무엇이고 어떻게 사용하는 것인가?
* * * * *
분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-7)
-
별을 통해 작업 주기를 설정할 수 있다. 순서대로 분-시간-일-월-요일 순이다.
-
또한 괄호 안의 숫자 범위 내로 별 대신 입력이 가능하다.
-
요일에서 0과 7은 일요일. 1부터 월요일이고 6이 토요일 순서이다.
매분
# 매분 test.py 실행
* * * * * /폴더/test.py
특정 시간
# 매주 금요일 오후 3시 30분에 test.py 실행
30 15 * * 5 /폴더/test.py
반복
# 매일 매시간 0분, 30분에 test.py 를 실행
0,30 * * * * /폴더/test.py
특정 범위
# 매일 오후 3시 0분부터 30분까지 매분 tesh.py 를 실행
0-30 15 * * * /폴더/test.py
특정 간격
# 매 30분마다 test.py 를 실행
*/30 * * * * /폴더/test.py
Crontab 주의 사항
- 코드는 한줄 하나의 명령어만 사용할 것!
# 잘못된 예시
* * * * *
/폴더/test.py
# 좋은 예시
* * * * * /폴더/test.py
Crontab 로깅 하기
Crontab 작업 기록을 상시로 남기는 방법은 다음과 같다.
* * * * * /폴더/test.py > /폴더/test.py.log 2>&1
-
test.sh.log 파일이 갱신 되어 작업 내용을 알 수 있다.
-
만약 2>&1 을 제거하면 쉘스크립트에서 출력
Crontab을 오랫동안 실행해야 할 경우
* * * * * /폴더/test.py >> /폴더/test.py.log 2>&1
-
Crontab을 오랫동안 사용해야 하는데 로딩을 하고 싶을 때 사용한다.
-
하지만 로그가 과도하게 쌓이면 리눅스 퍼포먼스에 영향을 주므로 가끔씩 비워주거나 파일을 새로 만들어주어야 할 수도 있다.
재배에 Crontab 사용해보기
- 라즈베리파이 카메라가 매 30분 간격으로 매일 작물 상태를 촬영하도록 설정하였다.
*/30 * * * * python3.7 /home/pi/camera/camera.py