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 설정을 해놓은 것입니다.
'개발' 카테고리의 다른 글
[노마드코더]인스타 클론코딩 사전 지식 쌓기 (0) | 2021.03.07 |
---|---|
python beautifulSoup를 이용해 crawling 한 정보 db저장하기 (0) | 2020.08.04 |
ec2 ppk 파일 없이 접속하기 (0) | 2020.08.02 |
라즈베리파이 기본설정 (0) | 2020.07.23 |