시간 기반 작업 스케줄러 Cron 다루기

이번에 처음으로 리눅스 내에서 동작하는 Cron 을 다루어 보았다.

웹 사이트 운영 도중 첨부파일이 파일 서버로 넘어가기 전 WAS 서버 내 임시파일이 저장 되며 쌓여가기 시작 했다.

이를 배치 스케줄러를 만들어 매일 새벽 4시 쯤 삭제 하고 싶었고 간단한 방법이 없을까? 하고 이것 저것 찾던 도중 cron 에 대해 알게 되었다.

Cron 이란?

cron 은 리눅스 환경에서 사용 가능한 시간 기반 작업 스케줄러다. 예를 들어 매분, 매일, 매달 등 내가 원하는 시간에 특정 동작(스크립트 파일, 명령어)를 실행하도록 설정하는 것이다.

내가 생각한 활용 방안으론 서버 점검 스케줄, 서버 내 특정 폴더 매일 정리, 담당자에게 주기적으로 서버 정보 메일 발송 등 여러가지 방안이 있을 것 같았다.

ChatGPT 로 찾아본 결과 cron 은 주로 서버 관리, 데이터베이스 백업, 시스템 유지보수 작업 등을 자동화 하는데 사용 된다 조사 된다. 내가 위에 생각한 자동화 내용과 대동소이 하다.

이는 위에 적은 것과 같이 리눅스 환경에서 동작하는 시스템으로 윈도우 환경 에선 작업 스케줄러(Task Scheduler) 가 유사한 기능을 제공한다.

cron 을 설정해 두면 사용자가 로그인 하지 않아도 서버가 실행 되어 있는 동안 백그라운드에서 자동으로 실행 된다.

Crontab 파일 수정으로 Cron 설정 하기

cron 은 리눅스 내 crontab 파일을 수정해 작업 스케쥴을 설정할 수 있다. 해당 파일 내 적은 Cron 내용 대로 작업이 실행된다.

* 해당 파일은 각 사용자가 자신만의 파일을 지닐 수 있다.

Crontab 사용 or 수정 방법

Crontab 은 리눅스 셀에서 다음 과정으로 수정이 가능하다.

  1. crontab -e 명령어로 crontab 파일 편집기로 접속
  2. 해당 파일 내 Cron 관련 표현식을 입력 후 콜론(:), wq 를 입력해 갱신

생각보다 간단한 방법으로 설정 할 수 있다.

그 외에도 다음과 같은 명령어들이 존재한다.

  • crontab -l : 크론탭에 어떤 내용이 있는지 확인이 가능하다.
  • crontab -r : 크론탭을 지운다.

Cron 표현식

그래서 저 crontab 에 입력해야 할 cron 표현식이 무엇일까? 이는 다음과 같이 간단히 표현됐다.

* * * * *

에엥, 별 다섯 개 밖에 안보이는데요? 그런데 정말 저런 식으로 표현한다.

좀 더 상세하게 설명하면 각 * 자리에 의미는 순서대로 다음과 같다.

분 시 일 월 요일

예를 들어 “매일 새벽 4시에 스크립트를 실행하고 특정 스크립트를 실행하고 싶다” 는 다음과 같이 작성 된다.

0 4 * * * /path/to/script.sh

여기서 내가 원하던 매일 새벽 4시에 특정 폴더 내 파일이 삭제 되는 스케줄러 구현의 감을 잡게 되었다.

매일 특정 폴더 내 파일 자동 삭제 스케줄러 구현하기

구현 방법은 아주 간단했다. 먼저 특정 폴더 내 파일이 삭제되는 스크립트 파일(.sh) 을 작성했다.

파일 내 내용은 다음과 같다.

rm -r /path/to/filefolder/*

해당 명령어는 리눅스 에서 /path/to/filefolder 폴더 내 파일을 삭제하는 명령어다. 여기서 rm 만 사용하게 되면 경로 내 파일만 삭제 될 수 있으므로 -r 옵션을 입력해 주면 하위 폴더 또한 삭제가 된다.

* 참고로 해당 명령어는 AIX 환경에서도 정상 동작 함을 확인 하였다.

그럼 이 파일을 filedelschedule.sh 로 path/to/script 내에 저장을 해 두었다면 위의 크론 표현식과 조합할 경우 매일 새벽 4시에 파일이 자동 삭제되도록 할 수 있는 것이다.

0 4 * * * /path/to/script/filedelschedule.sh


이 cron 표현식은 Jenkins 내 프로젝트의 스케줄러 설정에도 사용되고 있어 만약 Server 접근 권한이 없는 웹 개발자가 Jenkins 가 설치 된 서버를 가지고 있다면 쉽게 스케줄러 설정도 가능하다.

시간이 된다면 Jenkins 를 통한 스케줄러 설정 방법도 정리해 볼 예정이다.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
목차
위로 스크롤