리눅스 환경의 웹서버를 구동하는 경우 cron을 사용하여 특정 작업(Task)을 원하는 시간 등에 자동으로 구동 시킬 수 있습니다. 아래에서 자세히 알아봅니다.



# Linux cron을 사용하기
언제 cron을 사용할까요? 아래와 같은 경우 많이 사용됩니다.
정해진 시간에 반복 수행되는 작업 단위를 수행할 때...예를들어 매일 파일이나 데이터베이스의 백업을 수행하고 싶다면? 이 작업 역시 cron을 사용해 가능합니다. 게다가 백업을 수행 후 원하는 위치에 파일을 보내는 것도 가능합니다.

또 내부 캐쉬를 비우는 작업도 가능합니다. 만약 redis 등의 in-memory를 사용하여 캐시를 사용한다면? 이를 비우는 작업도 필요하겠죠. 원하는 시간... 사람이 없는 새벽 등에 캐시를 깨끗히 비우는 것도 당연히 가능하죠. 그럼 cron을 어떻게 사용할까요?


! cron은 어떻게 동작하고 어떻게 사용하는가?
cron은 하나의 서비스로 서버에 항상 띄워져서 동작하게 됩니다. 그래서 정해진 시간에 원하는 동작을 수행할 수 있죠. 이 때 cron이 동작하기 위해서는? crontab 내부에 할 일인 Task가 필요합니다. 순서대로 본다면...

1. cron을 서비스를 동작 시키기
2. crontab에 Task를 등록하기
3. 정해진 일정에 Task가 수행 됨

그럼 cron에 대하여 알아보았으니 사용하기 위한 준비, 설치 방법입니다.


! 리눅스 cron 설치하기
ubuntu 등의 환경에서 apt-get 또는 apt를 사용하여 설치할 수 있겠죠.
sudo apt-get install cron

이제 cron이 설치되었습니다. cron이 잘 동작하는지 확인해봐야겠죠.
systemctl status cron

잘 동작하는 것 같습니다. 대부분 잘 동작한다고 나오겠죠. 하지만 만약 동작하지 않는 다면 아래처럼 cron 서비스를 시작해주세요.
systemctl enable cron

이제 task를 등록해야 합니다. crontab을 사용하는 방법을 알아봅니다.



# crontab을 사용하여 Task, 스케쥴 등록하기
크론이 동작하려면? 당연히 뭔가를 하도록 백업이든 어떤 일감(Tasks)이 필요하겠죠. crontab에 우리가 해야 할 일을 건네주는 작업입니다.

! crontab 작업 리스트 확인 및 등록하기
crontab에 작업을 등록하기 위해서 먼저 현재 등록된 cron job, task의 여부를 확인합니다.

이 때 crontab에 작업을 등록하고 확인하는 방법은 두 가지가 존재합니다.

1. crontab 명령어 사용하기
2. /etc/crontab 파일 내부 확인하기(system-wide crontab)

둘 다 crontab을 사용해 task를 등록하고 실행할 수 있습니다. 이 때 사용되는 문법 등도 모두 동일합니다. 아래는 1번 방법인 crontab명령어를 사용하는 방법입니다.

@ 리스트 확인하기
crontab -l

이미 등록된 작업 등을 확인하여 중복되거나 필요없는 작업 등을 삭제할 수 있죠.

@ Task 등록하기
task 등록은 매우 간단합니다. 편집기를 사용해 일정을 등록하는 것과 같은데요 ~ crontab에 -e 옵션을 사용해 실행합니다.
crontab -e

나타나는 환면은 crobtab의 간략한 설명과 등록하는 방법을 볼 수 있습니다. 이때 하단에 보면 아래와 같은 문구를 볼 수 있죠.
# m h dom mon dow command

가장 중요한 부분인데요 이 순서대로 등록해야 합니다. 좌측부터 보면 아래와 같은 순서입니다.

- 분
- 시간
- day of month
- 달
- day of week [1, 2, 3 ...] => [월, 화, 수 ...]
- 실행할 명령어

이와 같이 작업을 등록할 수 있습니다. 이때 *(Asterisk) 기호는 항상 실행한다는 의미입니다. 몇 가지 예제를 알아보겠습니다.


@ 매일 새벽 4시에 /home/root/test.sh 명령어 실행하기
매일 새벽에 뭔가의 작업을 test.sh 이름의 쉘스크립트를 만들어 실행하는 방법입니다.
00 04 * * * /home/root/test.sh

@ 매주 화요일 오전 05시에만 특정 스크립트 실행하기
이번에는 매 주 한 번만 실행 할 경우의 방법입니다.
00 04 * * 2 /home/root/test.sh

@ 연속된 날짜 및 요일 실행하기
추가로 토요일부터 일요일까지 실행하려면? 이때는 - 기호를 사용할 수 있습니다. 즉 토요일은 6이므로 6-7이 바로 토, 일이 되죠.
00 00 * * 6-7 /home/root/test.sh

코드는 매우 간결하죠. 이와 같이 순서에 따라 할 일을 등록하면 모든 것이 끝입니다. 동작하지 않으면 이때 test.sh는 실행 가능한지 권한을 확인해보세요.

참고로 sh 파일을 만들 때 특히 경로 설정시 주의해야 합니다. 이 경우 경로 설정은 / 루트를 기준으로 설정하는 것이 가장 좋습니다.
(X) ./../test.sh
(O) /home/myApp/test.sh 

관련 링크 >
https://webisfree.com/2017-07-31/linux에서-sh-실행파일-만드는-방법-및-예제


! crontab Task 삭제하기
이제 등록된 task를 삭제하는 방법을 알아봅니다. 아래와 같이 -r을 사용합니다.
cron -r

이제 등록된 task가 삭제됩니다. 이때 주의할 부분은 삭제할 것인지 묻지 않아 주의가 필요하죠. 그래서 -r -i를 함께 사용하면 confirm 여부를 확인합니다.
cron -r -i

여기까지 cron을 사용하는 모든 방법을 알아봤습니다.

이제 매일 해오거나 필요한 작업을 cron을 사용해 등록하고 실행해보시기 바랍니다.