여는 글
EC2에 배포한 프로젝트에서 파일을 주기적으로 삭제해야 한다거나, 주기적으로 이용자들에게 메일을 보내야한다거나,
문자를 보내야한다거나...
=> 이런 주기적으로 진행해야할 업무가 있을 것이다.
이를 직접 손으로 진행해도 되겠지만 너무 불편한 일이다.
오늘은 EC2에서 배포한 프로젝트를 관리할 수 있게하는 스케줄링인 crontab 기능을 사용해보자
어떤 기능이든 응용하여 자동화가 필요한, 혹은 주기적인 작업이 필요한 것을 모두 crontab으로 스케줄링 가능할 것이다.
crontab 이란
크론탭(crontab)은 서비스로 제공되는 유닉스 기반 시스템의 기본 내장 기능이다.
정확히 말하자면 크론(cron)은 유닉스 계열 운영체제에서 시간 기반 작업 스케줄러이고 크론탭은 이 크론 서비스의 설정 파일을 편집하고 관리하는 명령어인 것이다.
기본 내장되어 있기에 일반적으로 별도의 설치가 필요하지 않고 설정도 너무 간단하다.
진행해보자
(필자는 장고 프로젝트에서 자동화를 진행할 파이썬 스크립트를 실행하는 예제로 설명하지만, crontab은 파이썬 스크립트가 아니라도
다양한 방면으로 자동화 실행을 구축해둘 수 있기에 본인의 환경이 파이썬기반이 아닌 프레임워크기반이여도 정상적으로 적용할 수 있으니
이 부분에 대해서 참고하여 진행해보길 바란다.)
crontab 설정
1. EC2 접속
ec2에 접속하자
2. 크론탭 편집
crontab -e
=> 다음 명령어를 입력해 크론탭을 열자
=> 그럼 다음과 같은 화면이 출력된다. 이는 크론탭을 어떻게 편집할지 편집기 종류를 선택하라는 것이다. -> 1번을 선택하자(간단한 nano로)
3. 크론탭 작성
=> 그럼 뜨는 화면 맨 밑으로 화살표키를 통해 이동해서 아래의 명령어를 작성해주자
- 명령어 -
*/2 * * * * cd /home/ubuntu/preprint-cloud-service && /home/ubuntu/preprint-cloud-service/venv/bin/python manage.py delete_expired_uploads >> /home/ubuntu/preprint-cloud-service/log/cron.log 2>&1
각 부분의 의미
- 크론탭 시간 설정 (*/2 * * * *):
- */2: 매 2분마다 실행
- *: 매시간
- *: 매일
- *: 매월
- *: 요일 무관
- 디렉토리 이동 명령 : cd /home/ubuntu/preprint-cloud-service: 크론탭이 명령을 실행하기 전에 해당 디렉토리로 이동하는 것을 의미
- 파이썬 실행 파일 위치 : /home/ubuntu/preprint-cloud-service/venv/bin/python: 가상 환경 내의 파이썬 인터프리터 위치이다. 이 인터프리터를 사용하여 다음 명령어를 실행한다.
- Django 관리 명령어 : manage.py delete_expired_uploads: Django 프로젝트의 관리 명령어이다. 필자는 이 파이썬 스크립트에 7일이 경과한 파일을 일괄 삭제하는 코드를 작성해두었다.
- 로그 파일 위치 : >> /home/ubuntu/preprint-cloud-service/log/cron.log: 명령어의 표준 출력(stdout)을 이 파일에 추가해서 로그 파일 기록을 할 수 있도록 한다.
=> 위 내용을 입력후
Ctrl + O -> 파일저장
엔터
Ctrl + X -> 편집기 종료
=> 저장후 이렇게 편집기 종료를 해주자
4. 크론탭이 잘 작성되었는지 확인
crontab -l
=> 작업한 설정이 아래와 같이 출력된다.
결과확인
그럼 이제 2분마다 스크립트가 실행되는지 보자
필자는 delete_expired_uploads.py에 7일이상 경과된 파일들을 일괄 삭제하는 코드를 작성해두었다.
=> 현재는 파일이 꽉찬상태
=> 2분뒤 들어가니 잘 삭제되었다!
=> 로그 위치로 들어가보니 역시 잘 실행된 모습!
테스트 상이라 잘 돌아가는지 확인을 위해 2분으로 설정을 했지만
현재 프로젝트상 7일경과 파일이 삭제되어야기에 */2 * * * * -> 0 0 * * 1 이와 같이 변경하여 월요일 자정기준 실행될 수 있게 수정해두었다.
마치며
다음과 크론탭을 통해 파이썬 스크립트 뿐만 아니라 스케줄링이 적용될 수 있는 곳은 어디든지 적용하여 사용할 수 있다.
서비스 이용자의 계정을 일괄 수집하여 한번에 이메일을 발송한다던가, 정교하게 작성하여 서비스 자동화를 이룰 수도 있을 것이다.
활용방법은 무궁무진이니 이외의 범위에서 활용해볼 경우 구글링을 잘 해보길 바란다! 자료가 많으니
'AWS' 카테고리의 다른 글
가비아에서 500원에 도메인 구매후 EC2 프로젝트에 적용하기 (0) | 2024.08.10 |
---|---|
EC2 서비스에 도메인 구매 & 적용까지 + https 적용까지 간단하게 (1) | 2024.08.01 |
EC2 - 타임아웃 오류 해결방법 (0) | 2024.07.24 |
터미널에서 ec2 연결하기 - 매우간단 + 요약 (0) | 2024.07.16 |