我參考了之前的文章去下載 GAE 應用程式以便檢查看看到底是哪一個應用程式在 trigger 我的 Hostinger 免費主機, 因為太久忘記了, 所以就從最接近的 appfog-twstockbot 開始查起 :
# 下載備份 Google App Engine 應用程式檔案的方法
但是照原先的方法下載卻發現不像以前那樣會在 DOS 命令列中直接詢問 Google 帳號密碼, 而是顯示如下訊息 :
Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation. 著作權所有,並保留一切權利。
E:\>appcfg.py download_app -A appfog-twstockbot -V 1 E:\gae\appfog-twstockbot
09:35 PM Host: appengine.google.com
09:35 PM Fetching file list...
Your browser has been opened to visit:
https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2F&response_type=code&client_id=550516889913.apps.googleusercontent.com&access_type=offline
If your browser is on a different machine then exit and re-run this
application with the command-line parameter
--noauth_local_webserver
這時 DOS 就僵在那邊無法動彈 (其實就是在等待我們使用瀏覽器進行 Google 帳號認證), 同時冒出一個視窗詢問要用哪一個瀏覽器認證, 選好後就會開啟瀏覽器連線到 Google 進行認證, 我的 Google 帳號採用兩階段認證, 因此必須用登記的手機接收認證碼, 驗證成功後會顯示要求授權存取 GAE 與 Google Cloud 頁面 :
按允許後結束認證, DOS 畫面即回應開始下載 :
Authentication successful. (認證通過)
09:36 PM Fetching files...
09:36 PM [1/10] main.py (這個檔案就是我要檢查的 cron table 觸發對象)
09:36 PM [2/10] extjs.htm
09:36 PM [3/10] jquery.htm
09:36 PM [4/10] index.yaml
09:36 PM [5/10] static/dataTables.zh-tw.txt
09:36 PM [6/10] html5.htm
09:36 PM [7/10] app.yaml
09:36 PM [8/10] cron.yaml (這是 cron table)
09:36 PM [9/10] default.htm
09:36 PM [10/10] favicon.ico
打開 main.py (此為 MTV 架構中的 View, 或 MCV 架構中的 Controller, 負責 routing) 檢查, 果然就是去觸發我在 Hostinger 申請的免費的 16mb.com 網址, 抓到了. 以前如果佈署完應用程式就馬上做紀錄的話, 現在也不會這麼費事去調查.
接著檢查其中的 cron.yaml, 其內容就是 cron table :
cron:
- description: fetch_twse_daily_close
url: /fetch_twse_daily_close
schedule: every day 16:00
timezone: Asia/Taipei
- description: fetch_twse_daily_institutes
url: /fetch_twse_daily_institutes
schedule: every day 16:02
timezone: Asia/Taipei
- description: technical_analysis
url: /technical_analysis
schedule: every day 16:04
timezone: Asia/Taipei
- description: create_daily_report
url: /create_daily_report
schedule: every day 16:08
timezone: Asia/Taipei
- description: fetch_daily_report
url: /fetch_daily_report
schedule: every day 16:10
timezone: Asia/Taipei
- description: fetch_twse_daily_debit
url: /fetch_twse_daily_debit
schedule: every day 21:00
timezone: Asia/Taipei
- description: fetch_2330_tw_basic
url: /fetch_2330_tw_basic
schedule: every 11 minutes
timezone: Asia/Taipei
- description: fetch_2330_tw_dividend
url: /fetch_2330_tw_dividend
schedule: every 22 minutes
timezone: Asia/Taipei
- description: fetch_2330_tw_analysis
url: /fetch_2330_tw_analysis
schedule: every 12 minutes
timezone: Asia/Taipei
- description: fetch_2330_tw_balance
url: /fetch_2330_tw_balance
schedule: every 13 minutes
timezone: Asia/Taipei
- description: fetch_2330_tw_cash
url: /fetch_2330_tw_cash
schedule: every 14 minutes
timezone: Asia/Taipei
- description: fetch_2330_tw_income
url: /fetch_2330_tw_income
schedule: every 15 minutes
timezone: Asia/Taipei
- description: fetch_2330_tw_profit
url: /fetch_2330_tw_profit
schedule: every 16 minutes
timezone: Asia/Taipei
- description: fetch_2330_tw_owner
url: /fetch_2330_tw_owner
schedule: every 21 minutes
timezone: Asia/Taipei
- description: fetch_yahoo_company
url: /fetch_yahoo_company
schedule: every 60 minutes
timezone: Asia/Taipei
- description: fetch_yahoo_dealing
url: /fetch_yahoo_dealing
schedule: every 9 minutes
timezone: Asia/Taipei
- description: fetch_yahoo_credit
url: /fetch_yahoo_credit
schedule: every 10 minutes
timezone: Asia/Taipei
- description: fetch_yahoo_major
url: /fetch_yahoo_major
schedule: every 10 minutes
timezone: Asia/Taipei
- description: fetch_yahoo_earning
url: /fetch_yahoo_earning
schedule: every 20 minutes
timezone: Asia/Taipei
把第二行以下全部刪除, 只留第一行的 cron: 然後更新 cron table 即可終止 cron jobs 了. 參考 :
# 停止 GAE 的 cron jobs 的方法
接下來下達更新 cron 的指令 :
E:\>cd gae
E:\GAE>appcfg.py update_cron appfog-twstockbot
11:14 PM Host: appengine.google.com
11:14 PM Uploading cron entries.
E:\GAE>
註 : 加上 --oauth2 透過瀏覽器認證 (新版的 GAE SDK 已預設不須加, 較舊的則需要)
E:\GAE>appcfg.py --oauth2 update_cron appfog-twstockbot
注意, 不論是下載/上傳應用程式, 或者更新 cron 必須在應用程式 (此處為 appfog-twstockbot) 的上一層目錄 (此處為 GAE) 下執行, 參考 :
# GAE 的 Cron Job
所以上面下載應用程式應該在 E:\GAE 下比較一致 :
E:\cd GAE
E:\GAE>appcfg.py download_app -A appfog-twstockbot -V 1 appfog-twstockbot
最後補充一點, 如果不要用瀏覽器認證, 要像以前那樣直接在 DOS 輸入帳號密碼, 只要加上一些參數即可 :
appcfg.py download_app -A appfog-twstockbot -V 1 E:\gae\appfog-twstockbot --noauth_local_webserver
不過因為我的 Google 已經採用兩階段認證, 因此不能輸入 Google 密碼, 而是要輸入機器認證專用密碼, 我覺得還是用目前以瀏覽器進行認證較方便.
2016-12-26 補充 :
昨晚停掉 GAE 上的 appfog-twstockbot 應用的 cron 後, 果然就靜下來了 :
這樣就可以寫信給 Hostinger 說我的 16mb.com 免費主機只是做實驗用途, 不會再進行大量運算了, 希望他們可以恢復運作. 其實既然已經購買了 Premium 服務, 我是不需要這個免費主機, 但看到帳號底下有個 abuse 字樣總是不舒服, 而且無效的 cron 不斷運作也是耗損能源, 一切無效的動作都必須停止.
# https://cloud.google.com/appengine/docs/python/download
2016-11-27 補充 :
今天在鄉下老家電腦上用較舊版的 GAE SDK 照上面程序下載, 發現它還是跟以前一樣在 DOS 中詢問 Email 與密碼, 因為我的 Google 帳號已申請兩階段認證, 所以這密碼可不是 Google 帳號的密碼, 而是在 Google 帳號設定中授權 GAE 存取的另一組密碼, 我之前有特別記下來, 但是輸入後卻無法通過認證, 真是傷腦筋, 還要回去找之前所寫的紀錄, 很浪費時間. 我直接在 Google 搜尋, 馬上就找到結果了, 參考這篇 :
# 使用Google App Engine上傳程式, 一直要求輸入帳號密碼, 如何解決?
原來只要加上 --oauth2 就會透過瀏覽器進行 Google 帳號認證了, 例如 :
appcfg.py --oauth2 download_app -A appfog-twstockbot -V 1 E:\GAE\appfog-twstockbot
4 則留言 :
請問現在GAE是發生了什麼問題嗎?
我開了新專案後發現都不能使用了
GAE 還是可以用啊!
開了新專案,資訊主頁看是有的
https://goo.gl/photos/3YGizfWrAYZd5aRP6
可是控制頁面就會出現錯誤
https://goo.gl/photos/Gq4fpfrz5y7BpBz89
Storage 無法使用
https://goo.gl/photos/7x3jXPJyoSAg4bVD6
App Engine 也無法使用
https://goo.gl/photos/Lao2EiWU3DVmW7159
選擇上傳則會顯示不存在
https://goo.gl/photos/Vk9XT18oLqd8dmBY6
嗯, 好像有點問題. 我都在使用之前建立的 project, 沒有問題. 不知 Google 做了那些改變.
張貼留言