본문 바로가기
개발

ubuntu crontab 설정하기

by ujin2021 2020. 9. 25.

crontab은 윈도우의 스케줄러와 비슷한 역할을 합니다.

프로젝트에서 일주일이 지난 데이터는 db에서 삭제하기 위해 크론탭을 설정했습니다!

root 계정으로 로그인해서 설정했습니다.(sudo su)

 

1. 크론탭 실행 설정

~# crontab -e 명령어를 입력하면 어떤 에디터를 사용할건지 먼저 골라야 하는데 저는 nano를 사용했습니다(가장 쉽다고 적혀있어서요!)

들어가서 맨 마지막줄에 실행시킬 명령어를 적었습니다.

 

~# crontab -l 명령어로 자신이 설정해놓은 크론탭 파일의 정보를 볼 수 있습니다.

30 5 * * * 는 매일 5시 30분에 실행하겠다는 뜻이고, python3 cron.py 를 실행하겠다는 의미입니다. 설정에 대한 것은 다른 블로그를 참고했습니다. 그리고 python파일을 실행시킬때 python or python3 의 절대경로와 실행시킬 파일의 절대경로를 적어주어야 합니다! python경로찾기는 which python3 명령어를 입력하면 됩니다. (참고블로그)

 

2. crontab 로그 파일 설정

crontab 이 잘 실행되었는지 log를 저장하고 싶어서 찾아보니 우분투에는 기본적으로 cron log가 syslog에 포함됩니다. 따로 log를 관리하고 싶다면

~# vim /etc/rsyslog.d/50-default.conf

명령어를 입력하면 cron.* 부분이 있을 거에요 그 부분의 주석을 풀어줍니다.

~# sudo service rsyslog restart

위의 명령어로 syslog를 재시작해줍니다. 

이후에 옆에 적힌 /var/log/cron.log로 들어가면 log를 확인할수있습니다.!

 

3. cron 실행시키기

~# service cron start (처음 cron 실행시)
~# service cron restart (cron 변경후 재가동 시)
~# service cron status (crontab 작동 상태 확인)

위의 명령어로 crontab을 실행, 상태확인을 할 수 있습니다. status에 초록글씨로 active 가 적혀있다면 잘 작동하는 것입니다.

 

저는 처음에 크론탭이 잘 작동하는지 확인하기위해 오후 8시 5분(현재 오후 8시)에 echo "hello" 가 실행되도록 설정해두었습니다.(5 20 * * * echo "hello")  그런데 hello가 뜨지 않아 log파일을 확인해보니 

(root) CMD (echo "hello")가 적혀있는 걸 보니 작동은 잘 된것같은데 밑의 이유('No MTA installed, discarding output')때문에 출력이 안되는 것 같았습니다. 구글링해보니 MTA가 리눅스의 메일서비스라고 하더라구요. 

~# apt-get install postfix

postfix를 설치해주면 간단하게 해결됩니다. 

 

이후 원래 실행하려고 했던 파이썬 파일을 5분후에 돌리게 설정해두었더니 5분후 shell에 'You have mail in /var/mail/root ' 이 떠서 cat /var/mail/root 로 메일을 확인하니

잘 작동 된것을 확인할 수 있었습니다. 실제로 db에서도 일주일전의 데이터가 삭제되어있었습니다.

밑의 세줄은 제가 cron.py 파일에 print 설정을 해놓은 것입니다.