가짜연구소 내 Python - Data Engineering 스터디를 위해 작성했습니다.
https://www.notion.so/chanrankim/PseudoLab-c42db6652c1b45c3ba4bfe157c70cf09
(가짜연구소 링크)
https://www.notion.so/chanrankim/Data-Engineer-Python-83c206a662004120a8211a800581e124
(스터디상세 링크)
0. 들어가며
제목은 거창하지만, 메시지 내용은 간단하다. 리눅스에서 크론탭과 파이썬을 이용해서 매 시간마다 나에게 메시지를 보내볼 것이다.
https://gibles-deepmind.tistory.com/117
GCP에서 VM 인스턴스 생성 및 파이썬 설치는 아래 링크를 참조해볼 수 있다.
1. 참조 페이지
우선 설정 관련된 부분은 아래 링크를 참고했다.
https://blog.daum.net/geoscience/1624
여기서 얘기해주는 설정을 하나도 빠짐없이 모두 완료해야한다.
https://gam860720.tistory.com/523
https://novice-engineers.tistory.com/11?category=908185
코드는 위 사이트 들을 참고해서 작성했다. 거의 그대로 사용하고 몇개만 내가 바꿨다. 하나씩 읽어보면 실행하는데는 무리가 없을 것이다. 사전 환경 설정은 첫 번째 링크에 잘 정리되어 있으니, 꼭 한번 보시길
2. 파이썬 스크립트 작성
nano get_token.py
우선, token을 받아오는 py를 만들어준다.
import requests
url = 'https://kauth.kakao.com/oauth/token'
rest_api_key = 'yours'
redirect_uri = 'yours'
authorize_code = 'yours'
data = {
'grant_type':'authorization_code',
'client_id':rest_api_key,
'redirect_uri':redirect_uri,
'code': authorize_code,
}
response = requests.post(url, data=data)
tokens = response.json()
print(tokens)
import json
with open("kakao_code.json","w") as fp:
json.dump(tokens, fp)
위와 같이 각자의 key값들을 넣어주면 된다. 위 코드는 첨부한 링크의 코드를 그대로 사용하였다.
nano send_message2.py
다음으로, 메시지를 보내는 스크립트를 작성한다.
import json
import requests
from datetime import datetime
from pytz import timezone
date_time = datetime.now(timezone('Asia/Seoul')).strftime('%Y-%m-%d %H:%M:%S')
with open("/home/yours/python_dev/kakao_message_test/kakao_code.json", "r") as kakao:
tokens = json.load(kakao)
url="https://kapi.kakao.com/v2/api/talk/memo/default/send"
headers={
"Authorization" : "Bearer " + tokens["access_token"]
}
data = {
"template_object": json.dumps({
'object_type': "text",
'text': f"Run every hour at 57minutes. This is for DE-STUDY crontab test.",
'link': {
'web_url': 'https://developers.kakao.com',
'mobile_web_url': 'https://developers.kakao.com'
},
'button_title': f"{date_time}"
})
}
response = requests.post(url, headers=headers, data=data)
print(response.status_code)
여기서 한가지 주의할점은 with open을 할 때, 절대 경로를 넣어주었다는 점이다. crontab을 home directory에서 실행하기 때문에 절대 경로를 그대로 적어줘야 나중에 crontab 실행시 참조할 수 있다.
첫 번째 밑줄이 메시지에 표시되는 부분이고 두 번째 밑줄은 크론탭 실행 시간(timezone을 asia로 설정하여 kst로 시간을 가져오도록 하였다.)을 받아오는 부분이다. 여기는 커스터마이징하게 하고 나머지는 동일하게 가져가면 코드를 실행하는데는 무리없다.
nano message_send.sh
참고로, 크론탭 이용시 py스크립트 보다는 셸스크립트를 쓰는게 좋다고 하여 아래와 같이 python 스크립트를 실행하는 bash 파일을 하나 더 만들었다.
python3 /home/yours/python_dev/kakao_message_test/send_message2.py
크론탭 이용시에는 항상 절대 경로를 적어주는 것이 좋다.
3. 크론탭 실행
sudo apt-get uninstall crontab
sudo apt-get install crontab
처음에 크론탭 사용할 때 하도 애를 먹어서 시간을 5시간 가량 보냈는데, 삭제후 재설치하니 문제없이 잘 실행되었다. 크론탭은 유저 계정의 home 탭에서 사용하였다. cd ~ 참조
crontab -e
크론탭 편집기로 들어가는 코드이다. 처음 실행하면 편집기를 선택할 수 있는데, 1번을 입력하면 nano가 선택된다.
내부는 이렇게 되어 있는데
* * * * * bash /home/minmaxskull/python_dev/kakao_message_test/message_send.sh
위와 같이 작성하면 매분마다 해당 스크립트를 실행한다는 뜻이다. *별 의미는 본 글 대표 이미지를 참조해보면 알 수 있다. 예를 들어 */15 * * * * 이건 매 15분마다 실행한다는 뜻이고, 15 * * * * 이건 매시간 15분이 될때마다 실행한다는 의미이다.
sudo service cron restart
이렇게 하고 크론탭을 한번 restart해준다.
crontabl -l | tail -n 1
현재 실행되고 있는 crontab이 잘보인다. 그럼 결과는 어떨까?
4. 발송한 카카오톡 메시지 확인
매 분마다 설정한 알림이 잘 오는 것을 알 수 있다. 추가적으로, 1초 2초쯤에 메시지가 전송된 것으로 보아 crontab실행후 카카오톡 메시지가 보내지기 까지 1~2초간 약간의 딜레이가 있는 것 같다. 이상
5. Ref
https://arycoat.tistory.com/75
'딥상어동의 딥한 프로그래밍 > 엔지니어링' 카테고리의 다른 글
[Airflow] 리눅스 도커를 이용한 설치 삽질기 (1) | 2022.05.10 |
---|---|
[Airflow] 설치(pip install) 및 webserver 실행 (0) | 2022.05.08 |
[Linux] Python 가상환경 세팅하기 (bdist_wheel 에러 해결) (0) | 2022.04.10 |
[GCP] VM Instance 생성하기 (0) | 2022.04.08 |
AWS Free tier 과금 ㅂㄷㅂㄷ (0) | 2022.04.07 |
제 블로그에 와주셔서 감사합니다! 다들 오늘 하루도 좋은 일 있으시길~~
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!