開機自動執行腳本

vi /etc/rc.local

"/etc/rc.local" [readonly] 16L, 416C                                                                                                                      14,58-41      All
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

echo "看到這行字,說明添加自啟動腳本成功~" > /usr/local/test.log
sh /home/ubuntu/git_pull.sh
exit 0
sudo chown root:root /etc/rc.local
sudo chmod 755 /etc/rc.local
sudo systemctl enable rc-local.service

PM2

安裝

npm install pm2@latest -g

CLI

pm2 start xxx.json
pm2 restart xxx.json
pm2 stop xxx.json
pm2 list
pm2 del ${id}
pm2 logs

# 靜態檔的服務器
`pm2 serve <path> <port>`

JSON 格式

更多監控配置 http://pm2.keymetrics.io/docs/usage/watch-and-restart/

{
    "name": "manage",      //專案名稱
    "script": "./bin/www", //要執行的腳本
    "cwd":"./",            //專案目錄
    "watch":[     // [] 添加要監控的檔案,有更新就自動重啟
        "models",
        "routes"
    ],
    "ignore_watch" : [  //不監控的檔案
        "node_modules", 
        "client/img"
    ], 
    "watch_options": {  // 更多設定 http://pm2.keymetrics.io/docs/usage/watch-and-restart/
      "followSymlinks": false
    }
}
{
    "apps": [
        {
            "name": "METAMERCE_APP",    
            "script": "./metamerce",    
            "args": [
                "app"
            ],
            "ignore_watch": [
                "stdout.log",
                "logs"
            ],
            "log_date_format": "YYYY-MM-DD HH:mm",
            "merge_logs": true,
            "watch": false 
        }
    ]
}

啟動可以附加的參數

  • --name 指定 app 一個名字
  • --watch 檔案有變更時,會自動重新啟動
  • --max-memory-restart Memory 使用超過這個門檻時,會自動重啟
  • --log 指定 log 的位址, 若要指定新位址,需將原本的 process 刪掉,再重新啟動指定
  • --output 指定 output log 位址
  • --error 指定 error log 位址
  • --log-date-format 指定 log 的格式
  • --merge-logs 同一個 app 跑多程序時,不要依據程序 id 去分割 log, 全部合在一起
  • --arg1 --arg2 --arg3 指派額外的參數
  • --restart-delay 自動重啟時,要 delay 多久
  • --time 給 log 加上前綴
  • --no-autorestart 不要自動重啟
  • --cron 指定 cron 規律,強制重啟
  • --no-daemon 無 daemon 模式, listen log 模式
  • --spa 限定 serve 使用, 會重導所有的請求到 index.html
  • --basic-auth-username --basic-auth-password 用於靜態檔, 讓該頁面需要帳號密碼方可存取

開機自動啟動

  • 產生開機 script pm2 startup
  • 取消開機自動重啟 pm2 unstartup
  • 儲存下次重啟時,預設啟動的 process pm2 save
  • 如果有更新 node 的版本,記得更新 script pm2 unstartup && pm2 startup && pm2 save

常用指令

# Fork 模式
pm2 start app.js --name my-api # 指定程序名稱

# Cluster 模式
pm2 start app.js -i 0        # 會根據可用的 CPU 數量來啟動最大的程序數量,達到平衡負載的效果
pm2 start app.js -i max      # 跟上面一樣,但是廢除了
pm2 scale app +3             # 增加三個 worker
pm2 scale app 2              # 將 worker 更新成兩個

# 狀態顯示

pm2 list               # 顯示所有程序狀態
pm2 jlist              # 將程序狀態使用 raw JSON 印出
pm2 prettylist         # 將程序狀態用美化的 JSON 印出

pm2 describe 0         # 顯示特定程序的所有資訊

pm2 monit              # 監控所有程序

# Logs

pm2 logs [--raw]       # 以串流的方式顯示所有 log
pm2 flush              # 移除所有 log 檔案
pm2 reloadLogs         # 重新載入 logs

# 操作

pm2 stop all           # 停止所有程序
pm2 restart all        # 重新開啟所有程序

pm2 reload all         # 重新載入服務

pm2 stop 0             # 停止特定 id 的程序
pm2 restart 0          # 重新啟動特定 id 程序

pm2 delete 0           # 從 pm2 list 移除特定 id 程序, 但這並不會停止該程序
pm2 delete all         # 移除所有程序, 但這並不會停止這些程序

# Misc

pm2 reset <process>    # 重置 meta data
pm2 updatePM2          # 更新 pm2
pm2 ping               # Ensure pm2 daemon has been launched
pm2 sendSignal SIGUSR2 my-app # Send system signal to script
pm2 start app.js --no-daemon # 不要背景執行
pm2 start app.js --no-vizion # 不加這一行,預設執行 pm2 start app 時,只要 ssh key 沒問題, pm2 會自動比較 local 跟 remote, 看是否為最新的 commit,若否,會自動下載更新
pm2 start app.js --no-autorestart # 不自動重啟

PM2 Logs

  • 輸出 log pm2 logs
  • 顯示指定行數 log (指定倒數 200 行) pm2 logs --lines 200
  • 指定輸出程序 log pm2 logs id
  • 指定輸出格式 format pm2 logs --format
  • 指定輸出格式 json pm2 logs --json
  • 清空 log pm2 flush
  • 取消 log 可以利用指定 log 路徑為 /dev/null 來取消 log 輸出, log 參數用法請參考 ecosystem 範例

循環 log

如果你看過 log 檔案超肥,幾年的 log 都寫在同一個檔案; 如果你打開 log 資料夾,發現裡面躺著幾百個 log 檔案; 如果你看過千奇百怪的 log 檔名; 如果你 du -h 發現 log 資料夾大的嚇死人 如果你有以上的經驗,那恭喜你,你有救了

安裝

pm2 install pm2-logrotate

config 檔位置

/home/user/.pm2/module_conf.json

參數

  • max_size (預設 10M): 當 log 檔案達到多大時, logrotate module 會將它分割成另外一個檔案。 logrotate module 有可能在檢查檔案時,檔案已經超過指定的大小了,所以超過一些些是可能的。 單位可以自行指定, 10G, 10M, 10K
  • retain (預設 30 個 log 檔案): 預設最多保存的 log 數量,如果設定為 7 的話,將會保存目前的 log, 以及最多 7 個 log 檔案
  • compress (預設 false): 壓縮所有循環 log 檔案
  • dateFormat (時間格式,預設 YYYY-MM-DD_HH-mm-ss) : 檔案命名的時間格式
  • rotateModule (預設 true) : 跟其他 apps 一樣,循環 pm2’s module
  • workerInterval (預設 30 秒) : 多久 logrotate 會檢查一次 log 檔案大小
  • rotateInterval (預設每天午夜循環, 範例 0 0 * ): 除了設定檔案大小以外,我們也可以設定以時間為單位去循環,格式上採用 node-schedule
  • TZ (預設為系統時間): 檔案命名的時間會根據你所設定的時區而改變

圖示

*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    |
│    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── month (1 - 12)
│    │    │    └────────── day of month (1 - 31)
│    │    └─────────────── hour (0 - 23)
│    └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)

Reference

© Kimi Tsai all right reserved.            Updated : 2023-07-12 09:04:54

results matching ""

    No results matching ""

    results matching ""

      No results matching ""