mangreen / Some-Note

Development Memo
1 stars 0 forks source link

Restart pm2 when server reboot #11

Open mangreen opened 9 years ago

mangreen commented 9 years ago

http://pm2.keymetrics.io/docs/usage/startup/

把需要pm2运行的node命令都运行一遍,例如:

$ pm2 start app.js

然后,让pm2 dump这些进程列表

$ pm2 save

然后,让pm2生成一个自动运行的脚本

$ pm2 startup ubuntu

这行命令会在 /etc/init.d/ 生成一个 pm2-init.sh脚本,运行两条shell命令,让它成为服务:

$ chmod +x /etc/init.d/pm2-init.sh
$ update-rc.d pm2-init.sh defaults

重启机器,你会发现上一次执行的pm2进程,都自己恢复了。

原理是什么呢?可以看下/etc/init.d/pm2-init.sh:

#start() 在启动时恢复
super $PM2 resurrect
...
#stop() 在停止时dump进程列表
super $PM2 dump 
mangreen commented 7 years ago

http://abaotsai.com/wordpress/index.php/2016/07/12/%E4%BD%BF%E7%94%A8pm2%E7%AE%A1%E7%90%86node-js/

forever 與 PM2 的差異

Feature Forever PM2
Keep Alive
Coffeescript
Log aggregation
API
Terminal monitoring
Clustering
JSON configuration

那當然是用PM2好啦!!立刻來安裝。

1. 安裝pm2

$ npm install -g pm2

2. 啟動使用多CPU核心群

$ pm2 start budo.js -i 0

預設是用folk跑程式,使用-i 會變成用cluster跑,後面的數字代表要跑幾個CPU核,0代表max,結果會如下圖

$ pm2start

3. 顯示目前現有在執行的清單

如想要再次顯示像上圖的內容可以打這個指令

$ pm2 list

4. 監控CPU與記憶體使用量

$ pm2 monit

5. 使用WRK來測試環境

在MAC使用Homebrew安裝

$ brew install wrk

接著執行wrk來測試

$ wrk -c 100 -d 100 http://localhost:9005

結果如下

$ wrktest

6. 儲存工作並且重新啟動

電腦想重新開啟(hard restart)後,如何再重複執行這些task呢?

$ pm2 dump      //儲存dump
$ pm2 kill      //停止所有process
$ pm2 resurect  //復活所有process

7. 強健的API

建立一個process,它會回吐完整機器所有狀態,可用其他裝置來瀏覽此API頁面,達到監控的效果,成功建立後網址為http://localhost:9615

$ pm2 web

8. 其他指令

$ pm2 logs              //顯示日誌
$ pm2 stop all          //停止所有process
$ pm2 restart all       //重新啟動所有process
$ pm2 reload all        //0秒停機重啟(用在Network process)
$ pm2 stop 0            //停止指定的process
$ pm2 restart 0         //重啟指定的process
$ pm2 delete 0          //刪除指定的process
$ pm2 delete all        //刪除所有的process

9. 運行process不同方式介紹

$ pm2 start -i max  //根據有效CPU核心數量,啟動最大process數目
$ pm2 start app.js -i 3      //啟動3個 process
$ pm2 start app.js -x        //使用fork模式啟動 app.js 而不是用 cluster
$ pm2 start app.js -x -- -a 23   //用fork模式啟動,並且在--之後傳入參數 (-a 23)
$ pm2 start app.js --name serverone  //啟動app.js 並且命名為serverone
$ pm2 stop serverone             //停止 serverone 
$ pm2 start app.json             //啟動process 在 app.json裡設置選項
$ pm2 start app.js -i max -e err.log -o out.log  //啟動 並且生成配置檔
可用其他語言編譯(fork mode)
$ pm2 start my-bash-script.sh    -x --interpreter bash
$ pm2 start my-python-script.py -x --interpreter python