標籤:
今天坐在右邊的同事忽然欣喜的跟我說:嘿,推薦你個好東西,用PM2試試,比forever高端多了。表示一向落後於時尚的科技前沿的我認真的回答:什嗎?PM2.5還這麼嚴重,PM2又出來了!
要不是都已習慣了我的二,這氣氛還真要囧好一會兒~~呵呵……
先說說平時我都是怎麼部署程式的吧
1、最常用的屬nohup了,其實就是在後台執行進程,末尾加個&
[[email protected] ~]$ nohup node /home/zhoujie/ops/app.js &[1] 31490nohup: ignoring input and appending output to `nohup.out‘
即此時程式已啟動,直接存取即可,原程式的的標準輸出被自動改向到目前的目錄下的nohup.out檔案,起到了log的作用。該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。nohup就是不掛起的意思( no hang up)。
該命令的一般形式為:nohup command &
這個不太靠譜的樣子,經常默默的進程在後台就掛了
2、用screen另開一個螢幕,這種方式可以直接在螢幕上看到程式運行情況
給該應用程式開個screen,如:screen -r ops ,用npm start啟動,
退出該後台:ctrl + a,再按d,可不能直接ctrl +c,否則就退出了
這種方式很不專業,呵呵,不過方便看在生產環境的操作。
這個本質上用的forever,package.json裡配置的:
"scripts": { "start": "forever app.js", "test": "supervisor app.js" },
3、PM2
使用它要先安裝它,用root帳號和全域模式安裝一下:
npm install -g pm2
用它來啟動程式(在目前的目錄下可以直接啟動,pm2 start app.js --name uops)
[[email protected]dev uops]$ pm2 start app.js [PM2] Spawning PM2 daemon[PM2] Success[PM2] Process app.js launched┌──────────┬────┬──────┬─────┬────────┬───────────┬────────┬─────────────┬──────────┐│ App name │ id │ mode │ PID │ status │ restarted │ uptime │ memory │ watching │├──────────┼────┼──────┼─────┼────────┼───────────┼────────┼─────────────┼──────────┤│ app │ 0 │ fork │ 308 │ online │ 0 │ 0s │ 21.879 MB │ disabled │└──────────┴────┴──────┴─────┴────────┴───────────┴────────┴─────────────┴──────────┘ Use `pm2 info <id|name>` to get more details about an app
[[email protected] uops]$
看,它顯示了Success,程式已經默默的成功的啟動了,可以即時監控程式的運行,比如執行個pm2 restart,則上述restarted那欄變成1,可以顯示程式運行了多長時間、佔用記憶體大小,實在是太贊啦!
終止程式也很簡單:pm2 stop
列舉出所有用pm2啟動的程式:pm2 list
[[email protected]dev uops]$ pm2 list┌──────────┬────┬──────┬─────┬────────┬───────────┬────────┬─────────────┬──────────┐│ App name │ id │ mode │ PID │ status │ restarted │ uptime │ memory │ watching │├──────────┼────┼──────┼─────┼────────┼───────────┼────────┼─────────────┼──────────┤│ app │ 0 │ fork │ 984 │ online │ 1 │ 3s │ 64.141 MB │ disabled │└──────────┴────┴──────┴─────┴────────┴───────────┴────────┴─────────────┴──────────┘ Use `pm2 info <id|name>` to get more details about an app
查看啟動程式的詳細資料:pm2 describe id
[[email protected] uops]$ pm2 desc 0Describing process with pid 0 - name app┌───────────────────┬─────────────────────────────────────────┐│ status │ online ││ name │ app ││ id │ 0 ││ path │ /home/zhoujie/uops/app.js ││ args │ ││ exec cwd │ /home/zhoujie/uops ││ error log path │ /home/zhoujie/.pm2/logs/app-error-0.log ││ out log path │ /home/zhoujie/.pm2/logs/app-out-0.log ││ pid path │ /home/zhoujie/.pm2/pids/app-0.pid ││ mode │ fork_mode ││ node v8 arguments │ ││ watch & reload │ ? ││ interpreter │ node ││ restarts │ 1 ││ unstable restarts │ 0 ││ uptime │ 93s ││ created at │ 2015-01-07T09:41:25.672Z │└───────────────────┴─────────────────────────────────────────┘[[email protected]-dev uops]$
通過pm2 list命令來觀察所有啟動並執行進程以及它們的狀態已經足夠好了.但是怎麼來追蹤它們的資源消耗呢?別擔心,用這個命令:pm2 monit
可以得到進程(以及叢集)的CPU的使用率和記憶體佔用(ctrl +c 退出)
即時集中log處理:pm2 logs
強大API: pm2 web
你想要監控所有被PM2管理的進程,而且同時還想監控運行這些進程的機器的狀態,
[[email protected]dev uops]$ pm2 webLaunching web interface on port 9615[PM2] Process /usr/local/node/lib/node_modules/pm2/lib/HttpInterface.js launched[PM2] Process launched┌────────────────────┬────┬──────┬──────┬────────┬───────────┬────────┬─────────────┬──────────┐│ App name │ id │ mode │ PID │ status │ restarted │ uptime │ memory │ watching │├────────────────────┼────┼──────┼──────┼────────┼───────────┼────────┼─────────────┼──────────┤│ app │ 0 │ fork │ 984 │ online │ 1 │ 9m │ 74.762 MB │ disabled ││ pm2-http-interface │ 1 │ fork │ 1878 │ online │ 0 │ 0s │ 15.070 MB │ disabled │└────────────────────┴────┴──────┴──────┴────────┴───────────┴────────┴─────────────┴──────────┘ Use `pm2 info <id|name>` to get more details about an app
啟動程式的時候順便在瀏覽器訪問:http://localhost:9615
擦,我眼睛被亮瞎了,這麼炫酷,竟然把部署的伺服器的資訊和程式的資訊都顯示出來了:
這東西對程式啟動並執行監控頁面的開發實在是太有協助了,呵呵~~
好吧,我承認我有點失控了,前面說的有點混亂,我願意重新把命令整理一遍:
安裝:npm install -g pm2啟動程式:pm2 start <app_name|id|all>列舉進程:pm2 list退出程式:pm2 stop <app_name|id|all>重起應用:pm2 restart程式資訊:pm2 describe id|all監控:pm2 monit即時集中log處理: pm2 logsAPI:pm2 web (連接埠:9615 )
推薦:https://github.com/Unitech/pm2
http://www.oschina.net/translate/goodbye-node-forever-hello-pm2?cmp
nodejs高大上的部署方式-PM2