주요 콘텐츠로 건너뛰기

tankja

포인트 1,500 P

후원한 금액

tankja 님의 글 목록

Open Menu
Python 코드를 Heroku에 올리고 특정 시간에 실행하도록 하기
DECEMBER 20, 2016
Reading time ~4 minutes

python으로 학식 알림 봇을 만들었는데 서버가 필요했다. Heroku를 사용했고 특정 시간에 알림 프로세스를 규칙적으로 실행 시켜주는 방법을 적용해봤다.

Heroku 설치
Heroku에 가입을 하고 Heroku Dev Center 에서 운영체제에 맞는 installer을 다운받아서 설치한다.

Heroku에 python code 올리기
먼저 git으로 관리되고 있는 프로젝트 폴더로 이동한다.
(배포에 git을 이용하기 때문에 설치가 되어있어야 한다)

CLI를 이용하여 login을 하고 heroku에 앱을 생성한다.

$ heroku login
Enter your Heroku credentials.
Email:
Password (typing will be hidden):
Authentication successful.

$ heroku create
Creating app... done, ⬢ [heroku_app_name]
https://[heroku_app_name].herokuapp.com/ | https://git.heroku.com/[heroku_app_name].git
앱이 생성되었다는 메세지와 함께 생성된 앱의 이름(heroku_app_name)이 표시된다.
https://dashboard.heroku.com/apps에 가서 로그인하여 확인해보면 동일한 이름의 앱이 생성된 것을 확인할 수 있다. 또한 앱이 생성됨과 동시에 heroku 라는 이름의 git remote가 자동으로 설정된다.

$ git remote -v
heroku https://git.heroku.com/[heroku_app_name].git (fetch)
heroku https://git.heroku.com/[heroku_app_name].git (push)
origin https://github.com/[...].git (fetch)
origin https://github.com/[...].git (push)
위의 명령으로 확인해 볼 수 있다.

이제부터는

$ git push heroku master
라는 명령으로 push를 하면 heroku에 배포를 할 수 있다.

필요한 파일
python을 heroku에 배포하기 위해서는 몇가지 파일들을 더 추가해줘야 한다.

requirements.txt
$ pip freeze > requirements.txt
명령으로 현재 프로젝트에 사용되고 있는 패키지들의 리스트를 저장해서 heroku에서 배포할 때도 설치할 수 있도록 해줘야한다.

runtime.txt
$ echo 'python-3.5.2' > runtime.txt
사용하고 있는 python version을 명시해줘야한다.

Procfile
$ echo 'clock: python 파일명.py' > Procfile
서버에서 실행할 명령어를 넣어준다.
명령어 앞에 process type을 지정하는데

web
worker
urgentworker
clock
등을 사용할 수 있지만 정확한 사용법은 잘 모르겠다.
clock을 사용한 이유는 Scheduler를 이용하여 특정 시간에 주기적으로 process를 실행시키기 위함이다.

파일 작성이 완료됐으면

git add [...]
git commit [...]
git push heroku master
으로 원격 저장소에 push 해주면 된다.

빌드팩 설치
python에 해당하는 빌드팩을 설치해줘야 한다.

$ heroku buildpacks:set heroku/python
$ heroku create --buildpack heroku/python
자세한 내용은 heroku buildpacks를 참고하면 된다.

APScheduler 이용하기
python에 지정한 시간마다 특정 함수를 실행시킬 수 있도록 해주는 패키지가 존재한다.

$ pip install apscheduler
새로운 패키지를 설치했으니 requirements.txt을 업데이트 해야한다.

$ pip freeze > requirements.txt
from apscheduler.schedulers.blocking import BlockingScheduler

sched = BlockingScheduler()

@sched.scheduled_job('interval', minutes=3)
def timed_job():
print('This job is run every three minutes.')

@sched.scheduled_job('cron', day_of_week='mon-fri', hour=17)
def scheduled_job():
print('This job is run every weekday at 5pm.')

sched.start()
첫 번째 지정한 데코레이터(@sched.scheduled_job('interval', minutes=3))는 3분 간격으로 아래의 함수를 호출한다는 의미로 This job is run every three minutes. 이라는 메세지를 출력한다.

두 번째 지정한 데코레이터(@sched.scheduled_job('cron', day_of_week='mon-fri', hour=17))는 평일 17시 마다 scheduled_job() 함수를 호출하여 This job is run every weekday at 5pm.이라는 메세지를 출력한다.

sched.start()를 통해 scheduler가 동작을 시작한다.

timezone 맞추기
원하는 시간에 프로그램이 실행되도록 하려면 timezone이 나의 시간과 일치해야한다.

SEOUL_TZ = pytz.timezone('Asia/Seoul')
today_index = datetime.now(SEOUL_TZ).weekday()
위의 코드는 timezone을 Asia/Seoul로 설정하고 오늘이 무슨 요일인지를 index로 알려주는 예시이다.(월요일 = 0)

$ heroku config:add TZ="Asia/Seoul"
heroku 서버의 timezone도 맞춰서 설정해줘야 한다. CLI를 통해서 timezone을 지정하여 위의 명령을 실행하면 된다.

참고자료
https://devcenter.heroku.com/categories/python

https://devcenter.heroku.com/articles/clock-processes-python

https://hyesun03.github.io/2016/10/10/heroku/

PYTHONHEROKU
LIKE TWEET +1

Next Post
Line Notification with python
Line에서 Http 호출을 이용하여 라인 메시지를 보낼 수 있는 기능을 제공한다. Command line 과 python 을 이용하여 Line Notify를 이용하는 방법에 대해서 알아보았다.Access Token Generate먼저 Li...… Continue reading

Previous Post
[Mac] Spring - Eclipse, Tomcat
Published on December 25, 2016

All Posts
All Tags
© 2018 Choi Ji Hun. Powered by Jekyll using the HPSTR Theme.

일, 2018/09/02- 22:48
283
0

★ 란 플레이하러 가기: http://goo.gl/dVtMok
지금 바로 게임 속에서 오연서를 만나보세요!

월, 2018/08/27- 07:19
1,003
0

대국민 건강 개선 프로젝트 [누구나라이나]
라이나가 당신의 건강과 함께 합니다.

라이나 공식 홈페이지
https://m.lina.co.kr

라이나생명 준법감시인 확인필 제 2018-208호 (2018.08.20)

월, 2018/08/27- 07:16
846
0

그 판사는 왜 새벽에 나와 파일 2만5000개를 삭제했을까
https://news.v.daum.net/v/20180808175318663

국회 "피감기관 돈 해외출장 금지"..38명 명단공개는 거부
https://news.v.daum.net/v/20180808202823307

목, 2018/08/09- 05:48
296
0

2015년 3월 19일 경상남도에서 무상급식 예산 지원을 중단하고
그 예산으로 서민 자녀 교육지원 사업을 시행하는 관련 조례안이 경남도의회에서 통과됐습니다.
이 때 참여했던 의원들 중
이번 지방선거에 출마하는 후보자 15명의 명단 입니다.

훌륭한 분들은 시민들이 기억해 줘야 합니다.
http://cpmadang.org/tags/455

2017년 7월 300mm의 기습적인 폭우로 22년 만에 최악의 수해를 입은 상태에서
충북도의원들 4명이 외유성 해외연수를 떠났었다.
그 때 4명 중.. 2명이 이번 지방선거에 출마한다.

http://cpmadang.org/tags/36337

2015년 6월 '메르스 공포'가 경기도를 중심으로 전국을 강타하고 있는 상황에서 경기도의회 의원들이 해외연수를 떠났습니다.
6월 2일 경기도의회 보건복지위원회 소속 의원 10명은 북유럽 보건복지 정책 견학을 한다며 7박 9일 일정으로 출국한 것 입니다.

당시에 문제가 되었던 도의원 중 5명이 이번 지방선거에 다시 출마합니다.
대부분 여당입니다.

관련 기사 : http://m.jeonguknews.co.kr/news/articleView.html?idxno=13847
관련 인물 : http://cpmadang.org/tags/1593

416 정신 및 실천조례 조례안은 416안산시민연대 등이 지난 2017년 3월 10일~7월 3일까지 주민발의 서명운동을 전개해 안산시민 8,796명의 이름으로 상정됐으나,
재석 의원 20명 중 찬성 10명, 반대 9명으로 가결 겨우 처리 되었습니다.
정당별로는 더민주당 의원은 모두 찬성했고, 자유한국당 의원은 이민근 의장을 비롯해 모두 반대했습니다. 유화 국민의당 의원은 표결에 불참했습니다.

관련 기사 : http://www.ohmynews.com/NWS_Web/view/at_pg.aspx?CNTN_CD=A0002386341

당시 이 조례안을 반대했던 자유한국당 9명 중, 6명이 이번 선거에 다시 출마 했습니다.
416 정신 및 실천조례 반대의원 명단 : http://cpmadang.org/tags/42029

화, 2018/06/05- 05:18
414
0

시행일정 요일 실시사항 기 준 일 관계법조
1. 15까지 월 인구수 등의 통보 인구의 기준일(예비후보자등록신청개시일이 속하는 달의 전전달 말일)후 15일까지 법§4, §60의2①
규§2①②, §118①
2. 3까지 토 선거비용제한액 공고·통지
예비후보자홍보물 발송수량 공고 예비후보자등록개시일전 10일까지 규§51①②
규§26의2③
2. 13부터 화 예비후보자등록 신청
[시·도지사 및 교육감선거] 선거일전 120일부터 법§60의2①
3. 2부터 금 예비후보자등록 신청
[시·도의원, 구·시의원 및 장의 선거] 선거기간개시일 전 90일부터 법§60의2①
3. 15까지 목 각급선관위 위원, 예비군 중대장이상의 간부, 주민자치위원, 통·리·반의 장이 선거사무관계자 등이 되고자 하는 때 그 직의 사직 선거일전 90일까지 법§60②
입후보제한을 받는 자의 사직 선거일전 90일까지[비례대표지방의원선거에 입후보하는 경우 선거일전 30일 : 5.14(월)] 법§53①②
3. 15부터
6. 13까지 목
수 의정활동 보고 금지 선거일전 90일부터 선거일까지 법§111
4. 1부터 일 예비후보자등록 신청
[군의원 및 장의 선거] 선거기간개시일 전 60일부터 법§60의2①
4. 14부터
6. 13까지 토
수 지방자치단체장의 선거에 영향을 미치는 행위 금지 선거일전 60일부터 선거일까지 법§86②
5. 22부터
5. 26까지 화
토 선거인명부 작성 선거일전 22일부터 5일이내 법§37, 규§10
거소투표자신고 및 거소투표자신고인명부 작성 법§38, 규§11
군인 등 선거공보 발송신청 법§65⑤
5. 24부터
5. 25까지 목
금 후보자등록 신청
(매일 오전9시 ~ 오후6시) 선거일전 20일부터 2일간 법§49
규§20
5. 30까지 수 선거벽보 제출 후보자등록마감일 후 5일까지 법§64②
규§29④
5. 31 목 선거기간개시일 후보자등록마감일 후 6일 법§33③
5. 31부터
6. 12까지 목
화 선거방송토론위원회 주관 대담·토론회 개최 선거운동기간중 법§82조의2
6. 1까지 금 선거공보 제출 후보자등록마감일 후 7일까지 법§65⑥
규§30⑤
선거벽보 첩부 제출마감일 후 2일까지 법§64②
규칙§29②⑤
6. 1에 금 선거인명부 확정 선거일전 12일에 법§44①
6. 3까지 일 투표소의 명칭과 소재지 공고 선거일전 10일까지 법§147⑧
거소투표용지 발송
(선거공보, 안내문 동봉) 선거일전 10일까지 법§65⑥, 154①⑤,
규§77
투표안내문(선거공보 동봉) 발송 선거인명부확정일 후 2일까지 법§65⑥, 153①,
규§76
6. 8부터
6. 9까지 금
토 사전투표소 투표
(매일 오전6시 ~ 오후6시) 선거일전 5일부터 2일간 법§155②, §158
6. 13 수 투 표 (오전6시 ~ 오후6시) 선 거 일 법 제10장
개 표 (투표종료후 즉시) 법 제11장
6. 25까지 월 선거비용 보전청구 선거일후 10일까지(기간의 말일이 토요일 또는 공휴일인 때에는 그 익일) 법§122의2①,민법§161
규§51의3①
8. 12이내 일 선거비용 보전 선거일후 60일이내 법§122의2①
규§51의3②

금, 2018/05/25- 05:20
279
0

[남북정상회담, 유머] 여기 판문점인데, 평양냉면 하나요..

토, 2018/04/28- 00:44
1,300
0

하루 만에 읽을 수 있었으면 좋겠습니다.

카페 같은 곳에서.. 커피 한잔 마시면서 읽을 수 있는 책..

그러나, 재미난 책..

추리소설이나, 간단한 인문학 서적이면 좋겠습니다.. ~~

추천 부탁드려요

금, 2018/04/27- 20:39
393
1

4. 서울특별시 자치구의회의원 선거구와 선거구별 의원정수에 관한 조례 일부개정조례안(서울특별시장 제출)
(16시 24분)
○의장 양준욱 다음은 의사일정 제4항 서울특별시 자치구의회의원 선거구와 선거구별 의원정수에 관한 조례 일부개정조례안를 상정합니다.
(의사봉 3타)
아울러 본 안건에 대하여 신건택 의원 외 18명이 수정안을 제출하였습니다.
그러면 수정안 제출과 관련하여 회의진행 순서와 표결순서를 간략하게 말씀드리겠습니다.
행정자치위원회 심사보고와 신건택 의원 외 18명이 제출한 수정안에 대한 제안설명은 원활한 회의진행을 위해 전자회의모니터상에 제공해 드린 내용으로 갈음하고 상정된 안건에 대한 토론을 진행하도록 하겠습니다.
(참조)
서울특별시 자치구의회의원 선거구와 선거구별 의원정수에 관한 조례 일부개정조례안 및 심사보고서
서울특별시 자치구의회의원 선거구와 선거구별 의원정수에 관한 조례 일부개정조례안 수정안 제안설명서
(회의록 끝에 실음)
○의장 양준욱 그리고 표결 순서는 서울특별시의회 회의규칙 제29조 규정에 따라 수정안을 먼저 표결하여 수정안이 가결되면 수정한 부분은 수정안대로 그 외 부분은 행정자치위원회에서 심사보고한 안대로 가결되고, 만일 수정안이 부결될 경우에는 다시 행정자치위원회에서 심사보고한 안을 곧바로 표결하도록 하겠습니다.
그러면 의결에 앞서 본 안건에 대한 토론을 진행하도록 하겠습니다.
먼저 노원구 출신 김광수 의원님 나오셔서 토론하여 주시기 바랍니다.
(방청석 소란)
김광수(노원) 의원님 안 계시면, 다음은 서초구 출신 김용석 의원님 나오셔서 반대토론하여 주시기 바랍니다.
없으시고, 반대토론 해 주실 문형주 의원님 나오셔서 반대토론하여 주시기 바랍니다.
문형주 의원님도 안 계셔.
더 이상 토론하실 의원님 안 계십니까?
(「없습니다」하는 의원 있음)
더 이상 토론하실 의원님이 안 계시므로 이상으로 토론을 마치고, 의사일정 제4항 서울특별시 자치구의회의원 선거구와 선거구별 의원정수에 관한 조례 일부개정조례안에 대하여 표결할 것을 선포합니다.
(의사봉 3타)
그러면 먼저 의사일정 제4항 서울특별시 자치구의회의원 선거구와 선거구별 의원정수에 관한 조례 일부개정조례안에 대한 수정안을 먼저 표결하도록 하겠습니다.
지금 표결은 신건택 의원 외 18명이 제출한 수정안에 대하여 표결하는 것입니다. 의원 여러분께서는 이 점 유념하여 주시고, 투표해 주시기 바랍니다.
(전자투표)
(방청석 소란)
투표를 다 하였습니까?
그러면 투표를 종료하겠습니다.
투표결과를 말씀드리겠습니다.
재석의원 55명 중 찬성 53명, 반대 1명, 기권 1명으로 의사일정 제4항 서울특별시 자치구의회의원 선거구와 선거구별 의원정수에 관한 조례 일부개정조례안은 신건택 의원 외 18명이 제출한 수정안에서 수정한 부분은 수정안대로 그 외 부분은 행정자치위원회에서 심사보고한 안대로 가결되었음을 선포합니다.
(의사봉 3타)
(전자투표 결과는 끝에 실음)
다음은 의안정리에 관한 사항입니다.
서울특별시의회 제279회 임시회 기간 중 의결된 안건에 대하여 서로 저촉되는 조항, 문구, 숫자, 기타의 정리가 필요한 경우 그 정리에 관한 사항을 서울특별시의회 회의규칙 제30조의 규정에 따라 의장에게 위임해 주시면 정리하도록 하겠습니다.
동료의원 여러분, 이의 없으십니까?
(「없습니다」하는 의원 있음)
이의가 없으므로 의안정리가 필요한 경우 의장이 정리하도록 하겠습니다.
이상으로 제279회 서울특별시의회 임시회를 모두 마치겠습니다.
산회를 선포합니다.
(의사봉 3타)
(16시 29분 산회)
○전자투표 결과
4. 서울특별시 자치구의회의원 선거구와 선거구별 의원정수에 관한 조례 일부개정조례안 수정안(수정안) - 가결
재석의원(55인)
찬성의원(53인)
강감창 강성언 권미경 金光洙
김기만 김동욱 김동율 김상훈
김생환 김선갑 金容錫 김인호
김제리 김진수 김진철 김창수
김창원 김희걸 맹진영 문영민
문종철 박기열 박성숙 박준희
박중화 박호근 서윤기 성중기
송재형 신건택 신언근 양준욱
오봉수 우미경 우형찬 유 용
유동균 이병해 이석주 이승로
이신혜 이윤희 이창섭 이혜경
장흥순 조규영 조상호 최영수
최호정 한명희 허기회 황규복
황준환
반대의원(1인)
최판술
기권의원(1인)
김문수

수, 2018/03/21- 20:14
429
0

국민의당 박주선 비상대책위원장은 24일 문재인 정부의 증세 추진 방침에 대해 "대통령의 지지도가 높으면 국민은 세금도 더 내야 하느냐"고 비난했다.

박 비대위원장은 이날 국회에서 열린 비대위 회의에서 "증세와 관련해 정부는 반드시 사회적 공론화와 합의를 거쳐야 한다"며 이같이 밝혔다.

수, 2017/07/26- 01:16
531
0

박영우님의 페이스북 글

일본군 성노예 피해자
고 김군자 할머님 빈소에서 벌어진
이 웃지못할 추태들

민주당 송영길, 손혜원 의원은 엄지 척 포즈까지 취하며
인증사진을 찍고 있다.

장례식장 안에서 건배를 하는 인간들이 없나
참으로 해괴망칙한 요상한 짓거리들을 하고있다.

수, 2017/07/26- 00:52
726
0

청주충북환경운동연합 과 충북청주경실련, 청주YWCA, 충북지속협 활동가들이 "수해복구"와.. 충북 의회의 "수해 봉사활동"

수, 2017/07/19- 22:02
673
0

충북 수해지역을 피해 유럽으로 여행 간 도의원들 홈페이지에 실린 수해복구지원 사진들..

본인들은 해외 여행을 가버렸는데,
그들의 블로그에는 수해 지역 봉사 활동 사진들이 올라가 있네요...

사진 한장 찍어.. 전체 의원들의 홈페이지를 채워주는 것 같습니다..
도의회의가 어떻게 운영되는지..
각 의원들의 블로그가 얼마나
성실하게 운영되는지 느낄 수 있을겁니다..

특히나.. 그들은 이것을..
봉사라고 적고 있네요 ..

수, 2017/07/19- 19:13
1,265
0

충북도의원과 공무원들이 18일 최악의 물난리로 고통받는 주민들을 뒤로하고 관광 일정이 수두룩한 유럽 연수를 떠났다. 도의원들은 전날 정부에 ‘특별재난지역 선포’를 촉구하는 성명서를 낸 뒤 곧바로 짐을 꾸렸다.
충북도의회 행정문화위원회 김학철·박봉순·박한범(자유한국당), 최병윤(더불어민주당) 의원 등 4명과 의회사무처 직원 3명, 도청 관광과 직원 1명 등 8명은 18일 오후 2시께 8박10일 일정으로 출국했다. 이언구(자유한국당)·연철흠(더불어민주당) 의원 등 2명은 연수를 포기했다. 이 의원은 “예약을 해 꼭 가야 하지만 허리가 좋지 않아 포기했다. 물난리가 난 지금 상황도 좋지 않다고 생각했다”고 말했다.

원문보기:
http://www.hani.co.kr/arti/society/area/803290.html#csidx3210c5bdbccbdc…

수, 2017/07/19- 18:46
658
0

서울시의회 의원 명단 입니다.
제가 만들었습니다.
..
무언가가 만들어 졌습니다...
세상 누구나도 할 수 있는 일이였지만, 아무도 하는 사람이 없어..
제가 만들었습니다..
* 시민정치마당은 이제까지.. 국회의원들의 명단만 가져 왔지만..
이제.. 부턴 전국의 시군 의원들의 명단까지 모두 가져오려 합니다..
시민들이 손으로 만져보고..
찔러 볼 수 있는 곳까지 가 보려 합니다..

작성된 페이지 입니다.
http://cpmadang.org/people?term_node_tid_depth%5B%5D=36358&combine=&ter…

금, 2017/07/14- 12:04
350
0

내가 찜한 목록