咱們能夠預約義一個配置文件,而後制定運行這個配置文件,好比咱們定義一個文件app.json,內容以下:node
[root@jenkins-master linux]# cat app.json { "apps":[ { "name": "service-sk_platform_professional_dev", "cwd": "/data/source/service-sk_platform_professional_dev/publish/", "script": "/data/source/service-sk_platform_professional_dev/publish/service/server.js", "log_date_format": "YYYY-MM-DD HH:mm Z", "error_file": "/data/pm2-log/errlogs/service-sk_platform_professional_dev-err.log", "out_file": "/data/pm2-log/outlogs/service-sk_platform_professional_dev-out.log", "pid_file": "/data/pm2-log/outlogs/service-sk_platform_professional_dev.pid", "instances": 1, "node_args": "--inspect=0.0.0.0:33111", "min_uptime": "20s", "max_restarts": 50, "watch": false, "merge_logs": true, "exec_interpreter": "node", "exec_mode": "fork", } ] }
[root@node-44 ~]# cat app.json { "apps":[ { "name": "sk_service_calculate_convert_dev", "cwd": "/data/source/sk_service_calculate_convert_dev/publish/", "script": "/data/source/sk_service_calculate_convert_dev/publish/service/server.js", "log_date_format": "YYYY-MM-DD HH:mm Z", "error_file": "/data/pm2-log/errlogs/sk_service_calculate_convert_dev-err.log", "out_file": "/data/pm2-log/outlogs/sk_service_calculate_convert_dev-out.log", "pid_file": "/data/pm2-log/outlogs/sk_service_calculate_convert_dev.pid", "instances": 1, "min_uptime": "20s", "max_restarts": 50, "watch": false, "merge_logs": true, "exec_interpreter": "node", "exec_mode": "fork", },{ "name": "sk_service_calculate_convert_dev2", "cwd": "/data/source/sk_service_calculate_convert_dev/publish/", "script": "/data/source/sk_service_calculate_convert_dev/publish/service/server.js", "args": "'debug' '12345'", "log_date_format": "YYYY-MM-DD HH:mm Z", "error_file": "/data/pm2-log/errlogs/sk_service_calculate_convert2_dev-err.log", "out_file": "/data/pm2-log/outlogs/sk_service_calculate_convert2_dev-out.log", "pid_file": "/data/pm2-log/outlogs/sk_service_calculate_convert2_dev.pid", "instances": 1, "min_uptime": "20s", "max_restarts": 50, "watch": false, "merge_logs": true, "exec_interpreter": "node", "exec_mode": "fork", },{ "name": "sk_service_calculate_convert_dev3", "cwd": "/data/source/sk_service_calculate_convert_dev/publish/", "script": "/data/source/sk_service_calculate_convert_dev/publish/service/server.js", "args": "'debug' '12344'", "log_date_format": "YYYY-MM-DD HH:mm Z", "error_file": "/data/pm2-log/errlogs/sk_service_calculate_convert3_dev-err.log", "out_file": "/data/pm2-log/outlogs/sk_service_calculate_convert3_dev-out.log", "pid_file": "/data/pm2-log/outlogs/sk_service_calculate_convert3_dev.pid", "instances": 1, "min_uptime": "20s", "max_restarts": 50, "watch": false, "merge_logs": true, "exec_interpreter": "node", "exec_mode": "fork", },{ "name": "sk_service_calculate_convert_dev4", "cwd": "/data/source/sk_service_calculate_convert_dev/publish/", "script": "/data/source/sk_service_calculate_convert_dev/publish/service/server.js", "args": "'debug' '12343'", "log_date_format": "YYYY-MM-DD HH:mm Z", "error_file": "/data/pm2-log/errlogs/sk_service_calculate_convert4_dev-err.log", "out_file": "/data/pm2-log/outlogs/sk_service_calculate_convert4_dev-out.log", "pid_file": "/data/pm2-log/outlogs/sk_service_calculate_convert4_dev.pid", "instances": 1, "min_uptime": "20s", "max_restarts": 50, "watch": false, "merge_logs": true, "exec_interpreter": "node", "exec_mode": "fork", } ] }
for (int i = 0;i<"${node_number}".toInteger();i++){ Integer nodeport=10000+i sh "cat /data/ansible/playbook/linux/linux_app.json |sed -e 's/sourcepath_node_Jenvironment/${projectname}_${environment}_${i}/g' -e 's/sourcepath_Jenvironment/${projectname}_${environment}/g' -e 's/process_mode/${process_mode}/g' -e 's/node_port/${nodeport}/g' >>${WORKSPACE}/publish/app.json" sh(script: "echo -n ',\r\n' >>${WORKSPACE}/publish/app.json") }
pm2 start app.jsonlinux
apps:json結構,apps是一個數組,每個數組成員就是對應一個pm2中運行的應用 name:應用程序名稱 args:腳本的參數域 cwd:應用程序所在的目錄 script:應用程序的腳本路徑 log_date_format: node_args:node 的參數域 error_file:自定義應用程序的錯誤日誌文件 out_file:自定義應用程序日誌文件 pid_file:自定義應用程序的pid文件 instances: min_uptime:最小運行時間,這裏設置的是60s即若是應用程序在60s內退出,pm2會認爲程序異常退出,此時觸發重啓max_restarts設置數量 max_restarts:設置應用程序異常退出重啓的次數,默認15次(從0開始計數) cron_restart:定時啓動,解決重啓能解決的問題 watch:是否啓用監控模式,默認是false。若是設置成true,當應用程序變更時,pm2會自動重載。這裏也能夠設置你要監控的文件。 merge_logs: exec_interpreter:應用程序的腳本類型,這裏使用的shell,默認是nodejs exec_mode:應用程序啓動模式,這裏設置的是cluster_mode(集羣),默認是fork autorestart:啓用/禁用應用程序崩潰或退出時自動重啓 vizion:啓用/禁用vizion特性(版本控制)
npm install -g pm2nginx
pm2 start app.jsc++
pm2 listgit
pm2 monitweb
pm2 describe [app id]shell
pm2 logsnpm
pm2 restart [app id]json
pm2 stop [app id]api
pm2 web
安裝時須要g++,make等軟件,下面的軟件你本身挑(我是剛裝完系統就都裝了) yum -y install ntpdate lrzsz tree cmake gcc gcc-c++ autoconf l libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel libxslt-devel libtool-ltdl-devel make wget docbook-dtds asciidoc e2fsprogs-devel gd gd-devel openssl openssl-devel lsof git unzip gettext-devel gettext libevent libevent-devel pcre pcre-devel npm install --unsafe-perm -g pm2-web pm2-web
[root@localhost ~]# cat pm2-web-config.json { "www": { "host": "localhost", "address": "0.0.0.0", "port": 11111 } } [root@localhost ~]# cat pm2-web-start.sh nohup pm2-web --config pm2-web-config.json >pm2-web.log& [root@localhost ~]# sh +x pm2-web-start.sh
server { listen 80; server_name pm2-web.xxxx.com; access_log /data/nginx/logs/node-web.xxx.com/node-web.xxxx.com.log main; location / { auth_basic "node-web monitor"; auth_basic_user_file /data/nginx/htpasswd.conf; //設置用戶訪問控制 proxy_pass http://192.168.0.xxx:xxxx; proxy_redirect off; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_connect_timeout 360; proxy_send_timeout 360; proxy_read_timeout 360; } }