本篇介紹如何讓您的 Heroku 服務能定時執行排程服務,並設定好正確的時區。
因為我們使用的是Heroku的免費方案,使用上會有限制:
超過30分鐘閒置會睡覺,喚醒需要約20秒(參閱dyno types)。
我就愛睏我就讚。
無綁定信用卡每月可醒550小時、綁定信用卡每月可再+450小時(即醒1000小時),如果時間爆了,就要等過了這個月才會甦醒喔(又一個雷姆?)。
可以用heroku ps -a <app name>
查閱目前使用資訊,或直接看 Heroku (參閱 Free Dyno Hours)。
設定一個可以定時喚醒的鬧鐘可減少喚醒等待時間。官方推薦使用Python的APScheduler模組當鬧鐘,鬧鐘只負責排程不負責其他任務,如同官方Scheduled Jobs and Custom Clock Processes的說明, 鬧鐘( job scheduler ) 與APP的關係如下:
摘述 APScheduler 模組可以做到的事情:
cron
式排程(具有可選的開始/結束時間)。接著我們用官網範例將鬧鐘加入到Heroku APP囉。
先參閱官方推薦的APScheduler介紹,我們需要安裝 APScheduler ,指令為pip install apscheduler
。
$ pip install apscheduler
如是指在 Heroku 佈署,則是在 requirements.txt
檔案添加一行apscheduler==3.6.3
(截至撰文時的版本)。
增加1個名為 clock.py
的檔案,意思是每週一至五的下午5點會 print()
,您也可以參考 cron 規則設定,檔案內容如下:
from apscheduler.schedulers.blocking import BlockingScheduler
sched = BlockingScheduler()
@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()
將 Procfile
檔案新增一行 clock: python clock.py
。
clock: python clock.py
將修改跟新增好的 requirements.txt
, Procfile
以及 clock.py
commit 至 Heroku ,熟悉的 git 指令來了。
$ git add .
$ git commit -am "make it better"
$ git push heroku master
最後一步是擴大時鐘過程,在您的終端機輸入 heroku ps:scale clock=1
。
heroku ps:scale clock=1
至Heroku 的 dashboard 瀏覽結果
另外因為您的Heroku 伺服器主機在美國,要修改時區為台灣,在"Settings"選"Reveal Config Vars",KEY 輸入 TZ
,VALUE 輸入 Asia/Taipei
。
之後觀察您的log檔案就會是正確時區了
提醒一下,如果dyno也睡著時,鬧鐘不會自動執行(文西太陽能手電筒的概念),要讓此clock.py
能夠不停執行,那就請想辦法每25分鐘規律的執行https://{你的 dyno }.herokuapp.com/
,但也僅記你沒信用卡綁定的話一個月只能醒550小時,綁定後醒1000小時的限制喔。
不要那麼兇啦。
本篇介紹了 Heroku 免費的 dyno 會愛睏的個性,並簡易修改官方設定排程,進一步客製化請搜尋 APScheduler
的相關設定,另外也修正時區顯示為台灣的時間。這篇文章也是希望能把 Heroku 設定更完整,當然您也可以依據自身需求晚點再設定,Heroku 設定告一段落,接下來開始加入好玩的功能到您的 LINE Chat BOT 囉,我們下篇見。
WOW 原來有 APScheduler 這個~
學到了~~
謝謝大神賞Like~!
另外請問一下,使用 clock 的話需要綁定信用卡才能使用嗎?
clock 不用綁定也可以使用,但是就是您所有 Dyno 共用一個月 550 小時的限制,您可以用$ kerolu ps
查詢目前使用情形,參考如下: