2024. 5. 9. 21:51ㆍ카테고리 없음
crontab
- crontab은 서버 내의 특정 작업(또는 명령)을 특정 주기로 스스로 실행하도록 하는 것을 뜻한다.
0. 내가 하고싶은 것
- 자정이 될 때마다 포인트 차감하기
1. 크론탭 세팅하기
- 1. 크론탭 설치하기
pip install django-crontab
- 2. settings.py에 앱 등록하기
#settings.py
INSTALLED_APPS = (
'django_crontab',
)
- 3. 앱 안에 cron.py 만들기
- 4. cron.py에다가 실행하고 싶은 함수 만들기
- 예를 들어서, 나는 포인트를 차감하고 싶기 때문에 포인트 차감 함수를 만들었다.
코드에 대해 짧게 설명하자면,
spartanews모델을 조회하고 for문으로 돌면서 point를 조회해서 5포인트 차감하고 저장!
- 5. settings.py에 실행할 시간 설정해주고 함수 위치 알려주기
#settings.py
CRONJOBS = [
('* * * * *', 'post.cron.update_news_point')
]
post.cron.update_news_point 는 함수 위치를 알려준다.(post 앱 안에 cron.py안에 update~~~함수)
- 5-1. * * * * *은 시간을 나타낸다.
- 분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-6)
- 아무것도 추가하지 않고 * * * * * 로 할시 1분 간격으로 실행되도록 기본 설정되어있음.
- 5-2. , - / 을 적용하면 다양하게 쓸 수 있다
- ,는 &를 의미
#settings.py
CRONJOBS = [
('* 1,5 * * *', 'post.cron.update_news_point')
]
#매일 1시와 5시에 실행
- -는 기간, 동안을 의미
#settings.py
CRONJOBS = [
('0-30 3 * * *', 'post.cron.update_news_point')
]
#매일 3시에 정각부터 30분간 실행
- */숫자 는 간격을 의미
#settings.py
CRONJOBS = [
('*/5 * * * *', 'post.cron.update_news_point')
]
#5분간 실행
2. 크론탭 사용해보기
크론탭 설치, 함수 만들기, settings.py에 설정 추가해주기를 마쳤다면
이제 명령어를 사용해서 크론탭이 잘 사용되는지 보자!
(당신이 맥 사용자이고, add를 했을 때 실행이 안 된다면, 밑에 "4. 오류해결하기" 먼저 보고오자)
# 크론탭 실행하기
python manage.py crontab add
코드가 복잡해보이지만 다 볼 필요는 없고 'adding cronjob :'
여기 다음부분만 보면된다. 내가 settings에다가 만들어준 cronjob 코드가 그대로 적혀있다면 잘 실행 되고 있는 것!
# 실행한 크론탭 제거하기(사용 중지하기)
python manage.py crontab remove
remove도 마찬가지로 removing cronjob: 다음부분에 코드가 잘 적혀있다면 잘 제거가 된 것이다.
# 실행 중인 크론탭있나 확인하기
python manage.py crontab show
잘 실행이 됐는지, 잘 제거가 됐는지 궁금하다면 show를 해서 볼 수도 있다.
두 개 사진의 코드를 일일히 볼 필욘 없다.
그냥 currently active job in crontab: 옆에 내 코드가 나와있는지 아닌지만 보면 된다.
나는 add, remove를 하고 나서 잘 작동하는지 보기 위해 항상 show로 확인하는 편이다.
3. 추가 꿀팁: 함수 실행 동시에 log기록도 함께 남기기
위의 코드만 해도 충분히 작동은 되겠지만 이게 잘 되고 있는지 안 되고 있는지 확인할 방법이 없다.
그래서 나는 log도 같이 찍어주는데, log를 추가하는 방법은 간단하다.
아까 settings.py에 같이 넣어주면 된다.
CRONJOBS = [
('*/5 * * * *', 'post.cron.update_news_point', '>> /Users/t2023-m0088/Desktop/sparta_news/data.log')
]
#시간, 함수위치, 어느 위치에 log가 생길지 절대경로로 알려줌
log이름은 아무렇게나 설정해주면 되고,
log가 어디 생기는지는 알아야하니, 앱이 있는 절대경로 위치를 설정해주었다
밑에 사진은 아까만든 함수인데, print('포인트가 차감되었습니다.') 이 부분이 로그에 찍히게 될 것이다.
원랜 아무것도 없었지만,
1분이 지나자 data.log가 자동으로 생긴 걸 볼 수 있다.
그리고 data.log에 들어가보면???
포인트가 차감되었습니다 라는 말이 잘 찍혀있다!
언제 차감됐는지 알고 싶다면 현재시각도 같이 넣어주면 된다.
cron.py를 조금 수정한 후 크론탭을 실행해보자
이렇게 차감됨과 동시에 시간이 같이 찍혀져나오는 걸 볼 수 있다!
4. 오류해결하기 (맥 사용자만 해당)
add를 했는데도 크론탭이 실행이 안 되는 오류가 있었다.
이리저리 해보다가 결국 해결했는데,
권한 문제 때문이었다.
- 맥 설정
- -> 개인정보 보호 및 보안
- -> 전체 디스크 접근 권한
- -> + 버튼 누르고 vscode찾아서 추가하기
- -> + 버튼 누르고 command+shift+g 누르고 /usr/sbin/cron 치고 누르기
- cron과 vscode추가 했으면 접근권한 켜주기
- vscode껐다가 다시 켜기
나는 이렇게 해서 오류 해결했다...
맥... 정말 ^^ 너 보안이 너무 좋아 ^^^^^^^^
다들 내 게시글이 도움이 됐길 바라며!
질문은 댓글로! 공감도 부탁혀~~~