最近試著在遠端VPS運行我的專案
發現有個不方便的地方
遠端的專案,當我斷掉ssh連線
他仍在運行
但
下次我sshx連回遠端vps時
已經看不到上次npm run start的那個狀態
沒辦法用ctrl+c來終止專案
每次都要用 lsof 來看 pid 再 kill
有點麻煩有點笨
查到有個小工具叫 PM2
很適合當前的需求
紀錄一下 steps
1
全域安裝
npm install pm2@latest -g
2
在專案根目錄
pm2 start npm --name "my-app" -- run start
3
這樣,即使終端會話結束,應用程序也會繼續運行。
後續使用 PM2,可以列出所有運行中的應用程序、停止、重啟或刪除它們:
pm2 list
pm2 stop my-app
pm2 restart my-app
pm2 delete my-app
4
實際操作:
我的scripts長這樣
"scripts": {
"devStart": "NODE_ENV=development node app.js",
"devDev": "NODE_ENV=development nodemon app.js",
"proStart": "NODE_ENV=production node app.js",
"prodev": "nodemon app.js",
"lint": "eslint "**/*.js" --fix",
"test": "mocha tests --exit --recursive --timeout 5000"
},
在vps生產環境上,我打算執行proStart
所以:
$ pm2 start npm --name 'pogo' -- run proStart
就會顯示
[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /root/.nvm/versions/node/v16.20.2/bin/npm in fork_mode (1 instance)
[PM2] Done.
並附贈一個精美表單 顯示已列在PM2 的項目
後續管理,就可以直接使用
pm2 list
pm2 stop pogo
pm2 restart pogo
pm2 delete pogo
( pogo 不用加上’’)
如果純用 ssh 連線,你也可以考慮用 screen 或是 tmux
我自己是習慣使用 screen , 且設定好 .screenrc 後可以快捷鍵操作,
新增、刪除工作分頁、Detache、分割視窗 都很方便,不用記太多內建的操作組合鍵
如果跟VPS突然斷線,也不用怕,
ssh 重新連線後 執行 screen -rd (reattach) 就重新接回到 screen 裡繼續之前的工作,
操作會保留在 screen 裡面。
如果都沒有接觸過 screen 跟 tmux 可以直接學 tmux 兩者的功能概念是相似的,
tmux 有更多的功能網路上資源應該也比較多,但是我用 screen 習慣了就...
這兩個聽起來很方便
下次搭站就來試試看
感謝大大分享
有人留言真是開心xd