使用Jenkins 遠程ssh到linux,使用命令:html
ssh root@192.168.10.1 'cd /data/test;nohup npm start &'
發現linux服務器的node進程沒有啓動。可是本地執行命令:node
cd /data/test;nohup npm start &
是能夠啓動的。linux
具體緣由,參考連接:shell
http://www.javashuo.com/article/p-zdgctson-m.htmlnpm
大體意思是,若是遠程執行的命令,不是守護進程。即便加了nohup,關閉ssh鏈接後,當前用戶啓動的進程會所有終止。json
所以,遠程執行的命令,必須是守護進程才行。api
pm2是nodejs的一個帶有負載均衡功能的應用進程管理器的模塊,相似有Supervisor,forever,用來進行進程管理。數組
npm install pm2 -g
pm2 start app.js pm2 start app.js --name my-api #my-api爲PM2進程名稱 pm2 start app.js -i 0 #根據CPU核數啓動進程個數 pm2 start app.js --watch #實時監控app.js的方式啓動,當app.js文件有變更時,pm2會自動reload
pm2 list pm2 show 0 或者 # pm2 info 0 #查看進程詳細信息,0爲PM2進程id
pm2 stop all #中止PM2列表中全部的進程 pm2 stop 0 #中止PM2列表中進程爲0的進程
更多pm2命令,請參考連接:
https://www.jianshu.com/p/eb98e639f41ebash
因爲公司的Nodejs項目,好比test,它有4個服務,所以有4個app.js。服務器
在package.json裏面,有定義啓動命令。好比:
"start:client": "cd ./client && npm start",
因爲package.json裏面有定義一些關聯啓動命令,所以直接用pm2啓動4個app.js,會致使應用異常。
pm2 start npm -- start這條命令是pm2的萬能命令,pm2 start ,就是這一系列命令中的最豪華命令。這個json咱們能夠理解爲一個任務參數描述文件。經過這個json文件,咱們把在命令行裏面很差描述的各類參數放到一個json文件裏面來
pm2 start <json>.json
pm2 start命令中的json格式詳解
{ "name": "manage", //項目名稱 "script": "./bin/www", //要執行的腳本 "cwd":"./", //項目所在目錄 }
執行shell文件版本
{ "name": "manage", //項目名稱 "script": "./bin/www.sh", //要執行的腳本 "cwd":"./", //項目所在目錄 "exec_interpreter": "bash", }
下面的test.json是公司項目
{ "apps": [{ "name": "test", //項目名稱 "script": "test.sh", //要執行的腳本 "cwd": "/opt/script/", //腳本所在目錄 "exec_interpreter": "bash", //應用程序的腳本類型 "exec_mode": "fork", "max_memory_restart": "1G", "autorestart": true, "node_args": [], "args": [], "env": { } }] }
說明:
test.sh
#!/bin/bash PROJECT_HOME=/data/test source /etc/profile && cd $PROJECT_HOME;nohup /usr/bin/npm start &
固然,pm2的參數還有不少不少不少,這裏僅僅是個範例demo,更多的參數能夠點擊這裏,查看官方文檔。
http://pm2.keymetrics.io/docs/usage/cluster-mode/
注意:當nodejs進程中止時,pm2會自動啓動進程。
本文參考連接: