iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 26
1
AI & Data

行銷廣告、電商小編的武器,FB & IG 爬蟲專案從零開始系列 第 26

【Day26】排程 - 重開機後排程不見惹?簡單幾個步驟,從此以後完全自動

解決問題的方法 ≠ 最好的方法;我只是提出我的解法,了解問題發生的原因後你可以想想自己如果遇到了會怎麼解決

/images/emoticon/emoticon02.gif 為什麼寫這篇文章

昨天的教學讓你的排程穩定的在背景執行,但是你重開機在終端機(Terminal)輸入 forever list 的指令你會發現 forever 根本沒有 forever

為了決這個問題,今天會教你如何在電腦啟動時執行 script 讓 forever 跑起來的方法,這塊我會分成 windows 跟 mac 來說明,請大家安心服用


/images/emoticon/emoticon12.gif 今日目標

1. 設定 mac 排程

1.1 撰寫執行排程的 shell script :crawler_cron.sh
1.2 將 crawler_cron.sh 設定為可以被執行
1.3 設定 crawler_cron.sh 在使用者登入後自動執行
1.4 重新登入確認 forever 是否運行

2. 設定 windows 排程

2.1 進入排程設定頁面
2.2 設定觸發條件
2.3 打開 windows 歷程紀錄
2.4 重開機確認 forever 是否運行


1. 設定 mac 排程

1.1 撰寫執行排程的 shell script :crawler_cron.sh

  1. 在專案目錄下建立存放 shell script 的 sh 資料夾,並新增 crawler_cron.sh
    • shell script 寫法很簡單,平常你怎麼在終端機下指令就怎麼寫
    • 專案資料夾路徑可用 pwd 指令取得
      https://ithelp.ithome.com.tw/upload/images/20201008/20103256rOSzx6iFRc.png

    crawler_cron.sh

    # 進入專案資料夾
    cd /專案資料夾路徑
    
    # 啟動排程服務
    yarn forever
    
  2. 執行 crawler_cron.sh 確認運作邏輯跟你想的一樣
    sh crawler_cron.sh 
    

    https://ithelp.ithome.com.tw/upload/images/20201008/201032562vlRtJSlZT.png

1.2 將 crawler_cron.sh 設定為可以被執行

建立的檔案一開始只有讀寫功能,我們要將 crawler_cron.sh 設定為可以被執行,才不會在自動化時因權限不足執行失敗

  1. 我們先觀察 crawler_cron.sh 的權限
    # 進入資料夾
    cd sh
    # 列出資料夾地下檔案權限
    ll
    

    https://ithelp.ithome.com.tw/upload/images/20201008/20103256P96bTPeMgp.png

  2. 目前 crawler_cron.sh 的權限是 -rw-r--r--
    • 權限要把他切分成 3 段來看:owner/group/others,所以代表檔案的 owner 有讀(r)寫(w)的權限,而 group/others 只有讀(r)的權限
    • 而我們要讓這個檔案可以被執行(x)需要下指令更改權限
      chmod 755 crawler_cron.sh
      

      https://ithelp.ithome.com.tw/upload/images/20201008/20103256MeSjeepK5V.png

    想要深入了解 chmod 檔案權限概念的請參考這篇文章

1.3 設定 crawler_cron.sh 在使用者登入後自動執行

  1. 我們要先確認 crawler_cron.sh 的檔案資訊
    https://ithelp.ithome.com.tw/upload/images/20201008/20103256pOU0u8aVdz.png
  2. 將打開檔案的應用程式設定成 iTerm (如果設定成 mac 原生的 終端機 也可以)
    • shell script 必須在終端機相關應用程式下執行
      Imgur
  3. 設定 crawler_cron.sh 在使用者登入後自動執行
    1. 進入 系統偏好設定 後,選擇 使用者與群組
      https://ithelp.ithome.com.tw/upload/images/20201008/20103256cy8QjdbSJL.png
    2. 選擇要觸法這個 shell script 的使用者,在 登入項目 下按 + 來新增觸發的項目
      https://ithelp.ithome.com.tw/upload/images/20201008/20103256Fz6LenlnLb.png
    3. 請選擇剛剛設定為可以 被執行的 crawler_cron.sh
      https://ithelp.ithome.com.tw/upload/images/20201008/201032568yX5hIysy6.png
    4. 加入項目後把 隱藏 打勾
      https://ithelp.ithome.com.tw/upload/images/20201008/20103256wsQbXoLxGG.png

1.4 重新登入確認 forever 是否運行

請你重新登入後在終端機(Trerminal)輸入 forever list 的指令確認是否正常運行
https://ithelp.ithome.com.tw/upload/images/20201008/20103256z59suYU3DX.png


2. 設定 windows 排程

2.1 進入排程設定頁面

  • 在鍵盤同時按下 : WIN + R
  • 輸入 : taskschd.msc
    https://ithelp.ithome.com.tw/upload/images/20201008/20103256GjYgTK0uxG.png

2.2 設定觸發條件

  1. 建立工作
    https://ithelp.ithome.com.tw/upload/images/20201008/20103256ByyG5BEPbz.png
  2. 選擇以最高權限執行,這裡我選擇 不論使用者登入與否均執行 是因為我要在開機時就觸發,而剛開機的時候使用者是還沒登入的;這塊可以依照自己的實際需求去做調整
    https://ithelp.ithome.com.tw/upload/images/20201008/20103256oCSu3PT8PO.png
  3. 在這裡設定為啟動時會開始工作
    https://ithelp.ithome.com.tw/upload/images/20201008/20103256URm1o5cmi1.png
  4. 編輯動作的部分有幾個需要注意
    • 程式或指令碼 : 你要找到當初安裝 yarn 的路徑,及 yarn.cmd 的檔案
    • 新增引數 : 填上 forever ,因為我們是用 yarn forever 啟動程式的
    • 開始位置 : 把專案的路徑複製上去即可
      https://ithelp.ithome.com.tw/upload/images/20201008/20103256vW6tdGXsFZ.png

2.3 打開 windows 歷程紀錄

  • windows 需打開歷程紀錄否則不會執行該排程
    1. 我們看到建立的工作在歷程紀錄旁邊顯示 (已停用),我們需要把他開啟
      https://ithelp.ithome.com.tw/upload/images/20201008/20103256ZrNsJCB0pO.png
    2. 在左上角 工作排程器(本機) 按右鍵,選擇 啟用所有工作歷程紀錄
      https://ithelp.ithome.com.tw/upload/images/20201008/20103256DSckcuHj43.png
    3. 確認你要執行工作的歷程紀錄旁邊 沒有(已停用),就代表設定完成嚕
      https://ithelp.ithome.com.tw/upload/images/20201008/201032564AGBavfY6X.png

2.4 重開機確認 forever 是否運行

請注意因為使用的是最高權限執行 yarn forever,所以你在 cmd 裡面用 forever list 是看不到的

  1. 必須要用系統管理員身分執行 cmd
    https://ithelp.ithome.com.tw/upload/images/20201008/201032566Ne9lcf9A4.png
  2. 在這個權限下輸入指令 forever list 才能確認是否正常運行
    https://ithelp.ithome.com.tw/upload/images/20201008/20103256RlNRBadH0x.png

ℹ️ 專案原始碼

  • 今天的完整程式碼可以在這裡找到喔
  • 我昨天的把昨天的程式碼打包成壓縮檔,你可以在乾淨的環境試試看排程是不是重開機後依舊存在呢~
    • 請記得在終端機下指令 yarn 才會把之前的套件安裝
    • windows需下載與你chrome版本相同的chrome driver放在專案根目錄
    • 要在tools/google_sheets資料夾放上自己的憑證,申請流程請參考Day17
    • 調整fanspages資料夾內目標爬蟲的粉專網址
    • 調整.env檔
      • 填上FB登入資訊
      • 填上FB版本(classic/new)
      • 填上IG登入資訊
      • 填上SPREADSHEET_ID
      • 填上爬蟲執行時間(CRONJOB_TIME)
    • 在終端機下指令 npm install forever -g ,讓你在終端機的任何位置都能管控排程
    • 在sh資料夾中設定執行排程的shell script

/images/emoticon/emoticon41.gif 參考資源

  1. [LINUX] chmod 檔案權限大統整
  2. 工作排程器 啟用歷程記錄 原顯示(已停用) windows 2012

https://ithelp.ithome.com.tw/upload/images/20210720/20103256fSYXlTEtRN.jpg
在許多人的幫助下,本系列文章已出版成書,並添加了新的篇章與細節補充:

  • 加入更多實務經驗,用完整的開發流程讓讀者了解專案每個階段要注意的事項
  • 將爬蟲的步驟與技巧做更詳細的說明,讓讀者可以輕鬆入門
  • 調整專案架構
    • 優化爬蟲程式,以更廣的視角來擷取網頁資訊
    • 增加資料驗證、錯誤通知等功能,讓爬蟲執行遇到問題時可以第一時間通知使用者
    • 排程部分改用 node-schedule & pm2 的組合,讓讀者可以輕鬆管理專案程序並獲得更精確的 log 資訊

有興趣的朋友可以到天瓏書局選購,感謝大家的支持。
購書連結https://www.tenlong.com.tw/products/9789864348008


上一篇
【Day25】排程 - 用forever套件來控管排程,背景執行才是王道!
下一篇
【Day27】為爬蟲加上通知 - 透過 POSTMAN 了解 LINE Notify 如何使用
系列文
行銷廣告、電商小編的武器,FB & IG 爬蟲專案從零開始30

尚未有邦友留言

立即登入留言