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

這篇文章寫於 2020 年,文中的工具與版本可能已經更新,實作時請以官方文件為準。

本文目錄
  1. 為什麼寫這篇文章
  2. 今日目標
  3. 1. 設定 mac 排程
  4. 2. 設定 windows 排程
  5. 1. 設定 mac 排程
  6. 1.1 撰寫執行排程的 shell script :crawler_cron.sh
  7. 1.2 將 crawler_cron.sh 設定為可以被執行
  8. 1.3 設定 crawler_cron.sh 在使用者登入後自動執行
  9. 1.4 重新登入確認 forever 是否運行
  10. 2. 設定 windows 排程
  11. 2.1 進入排程設定頁面
  12. 2.2 設定觸發條件
  13. 2.3 打開 windows 歷程紀錄
  14. 2.4 重開機確認 forever 是否運行
  15. ℹ️ 專案原始碼
  16. 參考資源

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

為什麼寫這篇文章

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

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


今日目標

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 指令取得

      1.1 撰寫執行排程的 shell script :crawler_cron.sh(圖 1)

    crawler_cron.sh

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

    sh crawler_cron.sh
    

    crawler_cron.sh(圖 2)

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

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

  1. 我們先觀察 crawler_cron.sh 的權限

    # 進入資料夾
    cd sh
    # 列出資料夾地下檔案權限
    ll
    

    1.2 將 crawler_cron.sh 設定為可以被執行(圖 3)

  2. 目前 crawler_cron.sh 的權限是 -rw-r--r--

    • 權限要把他切分成 3 段來看:owner/group/others,所以代表檔案的 owner 有讀(r)寫(w)的權限,而 group/others 只有讀(r)的權限

    • 而我們要讓這個檔案可以被執行(x)需要下指令更改權限

      chmod 755 crawler_cron.sh
      

      1.2 將 crawler_cron.sh 設定為可以被執行(圖 4)

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

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

  1. 我們要先確認 crawler_cron.sh 的檔案資訊

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

  2. 將打開檔案的應用程式設定成 iTerm (如果設定成 mac 原生的 終端機 也可以)

    • shell script 必須在終端機相關應用程式下執行

      Imgur

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

    1. 進入 系統偏好設定 後,選擇 使用者與群組

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

    2. 選擇要觸法這個 shell script 的使用者,在 登入項目 下按 + 來新增觸發的項目

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

    3. 請選擇剛剛設定為可以 被執行的 crawler_cron.sh

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

    4. 加入項目後把 隱藏 打勾

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

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

請你重新登入後在終端機(Trerminal)輸入 forever list 的指令確認是否正常運行

1.4 重新登入確認 forever 是否運行(圖 11)


2. 設定 windows 排程

2.1 進入排程設定頁面

  • 在鍵盤同時按下 : WIN + R

  • 輸入 : taskschd.msc

    2.1 進入排程設定頁面(圖 12)

2.2 設定觸發條件

  1. 建立工作

    2.2 設定觸發條件(圖 13)

  2. 選擇以最高權限執行,這裡我選擇 不論使用者登入與否均執行 是因為我要在開機時就觸發,而剛開機的時候使用者是還沒登入的;這塊可以依照自己的實際需求去做調整

    2.2 設定觸發條件(圖 14)

  3. 在這裡設定為啟動時會開始工作

    2.2 設定觸發條件(圖 15)

  4. 編輯動作的部分有幾個需要注意

    • 程式或指令碼 : 你要找到當初安裝 yarn 的路徑,及 yarn.cmd 的檔案

    • 新增引數 : 填上 forever ,因為我們是用 yarn forever 啟動程式的

    • 開始位置 : 把專案的路徑複製上去即可

      2.2 設定觸發條件(圖 16)

2.3 打開 windows 歷程紀錄

  • windows 需打開歷程紀錄否則不會執行該排程

    1. 我們看到建立的工作在歷程紀錄旁邊顯示 (已停用),我們需要把他開啟

      2.3 打開 windows 歷程紀錄(圖 17)

    2. 在左上角 工作排程器(本機) 按右鍵,選擇 啟用所有工作歷程紀錄

      2.3 打開 windows 歷程紀錄(圖 18)

    3. 確認你要執行工作的歷程紀錄旁邊 沒有(已停用),就代表設定完成嚕

      2.3 打開 windows 歷程紀錄(圖 19)

2.4 重開機確認 forever 是否運行

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

  1. 必須要用系統管理員身分執行 cmd

    2.4 重開機確認 forever 是否運行(圖 20)

  2. 在這個權限下輸入指令 forever list 才能確認是否正常運行

    2.4 重開機確認 forever 是否運行(圖 21)

ℹ️ 專案原始碼

  • 今天的完整程式碼可以在這裡找到喔
  • 我昨天的把昨天的程式碼打包成壓縮檔,你可以在乾淨的環境試試看排程是不是重開機後依舊存在呢~
    • 請記得在終端機下指令 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

參考資源

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

參考資源(圖 22)

在許多人的幫助下,本系列文章已出版成書,並添加了新的篇章與細節補充:

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

有興趣的朋友可以到天瓏書局選購,感謝大家的支持。

購書連結:https://www.tenlong.com.tw/products/9789864348008

Talk

留言討論

留言載入中…