iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 17
1
自我挑戰組

用Line聊天機器人串起多媒體系統系列 第 17

Day 17 : 入厝 Heroku 建構 LINE Chat Bot - 3 (建立計時器)

本篇介紹如何讓您的 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囉。

    1. 先參閱官方推薦的APScheduler介紹,我們需要安裝 APScheduler ,指令為pip install apscheduler

      $ pip install apscheduler
      
    2. 如是指在 Heroku 佈署,則是在 requirements.txt檔案添加一行apscheduler==3.6.3 (截至撰文時的版本)。

    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()
      
    4. Procfile 檔案新增一行 clock: python clock.py

      clock: python clock.py
      
    5. 將修改跟新增好的 requirements.txtProcfile 以及 clock.py commit 至 Heroku ,熟悉的 git 指令來了。

      $ git add .
      $ git commit -am "make it better"
      $ git push heroku master
      
    6. 最後一步是擴大時鐘過程,在您的終端機輸入 heroku ps:scale clock=1

      heroku ps:scale clock=1
      
    7. 至Heroku 的 dashboard 瀏覽結果

    8. 另外因為您的Heroku 伺服器主機在美國,要修改時區為台灣,在"Settings"選"Reveal Config Vars",KEY 輸入 TZ,VALUE 輸入 Asia/Taipei

    9. 之後觀察您的log檔案就會是正確時區了

    10. 提醒一下,如果dyno也睡著時,鬧鐘不會自動執行(文西太陽能手電筒的概念),要讓此clock.py能夠不停執行,那就請想辦法每25分鐘規律的執行https://{你的 dyno }.herokuapp.com/,但也僅記你沒信用卡綁定的話一個月只能醒550小時,綁定後醒1000小時的限制喔。

      不要那麼兇啦。

小結

本篇介紹了 Heroku 免費的 dyno 會愛睏的個性,並簡易修改官方設定排程,進一步客製化請搜尋 APScheduler 的相關設定,另外也修正時區顯示為台灣的時間。這篇文章也是希望能把 Heroku 設定更完整,當然您也可以依據自身需求晚點再設定,Heroku 設定告一段落,接下來開始加入好玩的功能到您的 LINE Chat BOT 囉,我們下篇見。


上一篇
Day 16 : 入厝 Heroku 建構 LINE Chat Bot - 2 (管好你的 Token )
下一篇
Day 18 : 【RE : 從零開始的異世界Python】- 1
系列文
用Line聊天機器人串起多媒體系統30

1 則留言

0
NiJia
iT邦新手 5 級 ‧ 2020-09-18 10:23:10

WOW 原來有 APScheduler 這個~
學到了~~

看更多先前的回應...收起先前的回應...
威利斯 iT邦新手 5 級 ‧ 2020-09-18 13:04:15 檢舉

謝謝大神賞Like~!/images/emoticon/emoticon41.gif

NiJia iT邦新手 5 級 ‧ 2020-09-21 19:11:50 檢舉

另外請問一下,使用 clock 的話需要綁定信用卡才能使用嗎?

威利斯 iT邦新手 5 級 ‧ 2020-09-21 22:37:14 檢舉

clock 不用綁定也可以使用,但是就是您所有 Dyno 共用一個月 550 小時的限制,您可以用$ kerolu ps 查詢目前使用情形,參考如下:

NiJia iT邦新手 5 級 ‧ 2020-09-22 10:48:44 檢舉

謝謝回答! :)

NiJia iT邦新手 5 級 ‧ 2020-09-22 11:05:17 檢舉

歡迎至社群分享您的文章讓大家一起共襄盛舉~
建議可以5篇以上一篇文章也避免洗版/images/emoticon/emoticon12.gif
https://www.facebook.com/groups/chatbot.tw

威利斯 iT邦新手 5 級 ‧ 2020-09-22 11:49:38 檢舉

謝謝大大鼓勵!

我要留言

立即登入留言