Pm2 có thể chạy tập lệnh 'npm start' không


212

Có cách nào để pm2 chạy tập lệnh khởi động npm không hay bạn chỉ phải chạy pm2 start app.js

Vì vậy, trong sự phát triển

npm start

Sau đó, trong sản xuất với pm2, bạn sẽ chạy một cái gì đó như

pm2 start 'npm start'

Có một cách tương đương để làm điều này trong forever:

forever start -c "npm start" ./

Đây là phần mở rộng cho Câu trả lời được cung cấp bởi Dhaval stackoverflow.com/a/37775318/4828326 1. Trước tiên hãy thêm pm2 vào gói.json 2. Đối với chế độ phát triển, hãy cập nhật tập lệnh json gói của bạn như sau: "pm2: dev": "node_modules / pm2 / bin / pm2-dev bắt đầu npm - bắt đầu ",
Rama Krishna

Câu trả lời:


436

PM2 hiện hỗ trợ bắt đầu npm:

pm2 start npm -- start

Để gán tên cho quy trình PM2, hãy sử dụng --nametùy chọn:

pm2 start npm --name "app name" -- start

5
Làm thế nào bạn có thể đặt tên cho quá trình khi sử dụng lệnh này? Tôi đã thử sử dụng --name "app"nhưng nó chỉ đặt nó thành npm.
silverlight513

171
pm2 bắt đầu npm - tên "Tên ứng dụng của bạn" - bắt đầu
Laukik Patel

7
Bất cứ ai cũng biết làm thế nào để thiết lập npm starttrong các tập tin quá trình?
mqchen

1
CẢM ƠN BẠN RẤT NHIỀU!
hkg328

3
ah, tôi nghĩ rằng tôi đã tìm thấy câu trả lời cho câu hỏi của tôi. Đó không phải là một thứ pm2 hay npm, nó dường như là một cách nói * nix "Tôi đã hoàn thành việc đưa ra các tùy chọn lệnh và muốn bắt đầu truyền các đối số": unix.stackexchange.com/questions/11376/ Kẻ
Chris Schmitz

96

Những người đang sử dụng tập lệnh cấu hình như .jsontệp để chạy quy trình pm2 có thể sử dụng npm starthoặc bất kỳ tập lệnh nào khác như thế này -

ứng dụng của tôi-pm2.json

{
    "apps": [
        {
            "name": "my-app",
            "script": "npm",
            "args" : "start"
        }
    ]
}

Sau đó, đơn giản -

pm2 start my-app-pm2.json

Chỉnh sửa - Để xử lý trường hợp sử dụng khi bạn có tập lệnh cấu hình này trong thư mục mẹ và muốn khởi chạy một ứng dụng trong thư mục con, sau đó sử dụng cwdthuộc tính.

Giả sử ứng dụng của chúng tôi nằm trong thư mục con nested-appliên quan đến tệp cấu hình này thì -

{
    "apps": [
        {
            "name": "my-nested-app",
            "cwd": "./nested-app",
            "script": "npm",
            "args": "start"
        }
    ]
}

Chi tiết hơn ở đây .


1
Làm thế nào để nó hoạt động nếu tôi muốn chạy tập lệnh npm bắt đầu từ một thư mục mẹ?
Gianfranco P.

1
Bạn có thể giải thích thêm một chút không? Tôi giả sử bạn đang hỏi Làm thế nào để chạy npm bắt đầu từ bên ngoài thư mục dự án? .
Jyotman Singh

Tôi đang sử dụng tập lệnh cấu hình để chạy nhiều ứng dụng nút trong các thư mục con. Gói.json với startthông tin tập lệnh nằm trong một trong số chúng. Xem ý chính này: gist.github.com/gianpaj/04c5680a8275616aac5e46374e07f673 Khi tôi chạy nó, nó không biết npmnên chạy từ đâu. Thx
Gianfranco P.

3
@GianfrancoP. Bạn có thể sử dụng cwdthuộc tính. Kiểm tra câu trả lời đã được chỉnh sửa của tôi :)
Jyotman Singh

Tôi đã thử sử dụng sudo npm và nó hiển thị lỗi truy cập để tạo một thư mục khó khăn. Tôi đã cấp quyền cho người dùng với quyền root và cũng chạy lệnh pm2 nhưsudo pm2 start config.json
Mr AJ

39

Đúng. Sử dụng pm2 start npm --no-automation --name {app name} -- run {script name}. Nó hoạt động. Các --no-automationlá cờ là có bởi vì không có nó PM2 sẽ không khởi động lại ứng dụng của bạn khi nó bị treo.


1
Bạn có biết làm thế nào để sử dụng cờ này bên trong tệp cấu hình ecystem.js không?
Tom

1
CẬP NHẬT: Được rồi tôi thấy nó bạn cần chỉ định "tự động hóa": sai.
Tom

@twigg pm2 --help | grep 'no-autom'trả lại một dòng cho tôi trong phiên bản 1.0.2
jcollum

26

Để sử dụng npm run

pm2 start npm --name "{app_name}" -- run {script_name}


25

Tôi đã viết kịch bản shell bên dưới (được đặt tên start.sh). Bởi vì tôi package.jsonprestartlựa chọn. Vì vậy tôi muốn chạy npm start.

#!/bin/bash
cd /path/to/project
npm start

Sau đó, bắt đầu start.shtrước pm2.

pm2 start start.sh --name appNameYouLike

Điều đó thật tuyệt. Thật không may, điều này không hoạt động khi sử dụng startOrRestartlệnh.
xpepermint

@xpepermint chỉ cần sử dụng cờ -f ở cuối. Nó buộc một sự khởi đầu. (tức là nó sẽ khởi động lại nếu đã bắt đầu)
Zeeno

16

Có, chúng tôi có thể, bây giờ pm2 hỗ trợ bắt đầu npm, - đặt tên cho tên ứng dụng loài.

pm2 start npm --name "app" -- start

Đây là câu trả lời thực sự giúp tôi. Cảm ơn rất nhiều.
Adesh Kumar

9

Xem để bật phân cụm:

pm2 start npm --name "AppName" -i 0 -- run start

Bạn nghĩ sao?


những gì hiện -i 0làm gì?
Johhan Santana

1
Bắt đầu các quy trình tối đa tùy thuộc vào CPU có sẵn (chế độ cụm)
jdnichollsc

7

Tôi cần chạy tập lệnh npm cụ thể trên ứng dụng của mình vào pm2 (cho mỗi env) Trong trường hợp của tôi, đó là khi tôi tạo dịch vụ dàn / thử nghiệm

Lệnh đã làm việc cho tôi (các đối số phải được chuyển tiếp theo cách đó):

pm2 start npm --name "my-app-name" -- run "npm:script"

ví dụ:

pm2 start npm --name "myApp" -- run "start:test"

pm2 start npm --name "myApp" -- run "start:staging"

pm2 start npm --name "myApp" -- run "start:production"

Hy vọng nó sẽ giúp


6

Nếu bạn sử dụng PM2 thông qua các mô-đun nút thay vì toàn cầu, bạn sẽ cần phải thiết lập interpreter: 'none'để các giải pháp trên hoạt động. Tài liệu liên quan ở đây .

Trong ecosystem.config.js:

  apps: [
    {
      name: 'myApp',
      script: 'yarn',
      args: 'start',
      interpreter: 'none',
    },
  ],

4

pm2 start npm --name "custom_pm2_name" -- run prod

"scripts": {
    "prod": "nodemon --exec babel-node ./src/index.js"
  }

Điều này làm việc cho tôi khi những người khác không


3

bạn cần cung cấp tên ứng dụng ở đây như myapp

pm2 start npm --name "appName" -- start

bạn có thể kiểm tra nó bằng cách

pm2 list

bạn cũng có thể thêm thời gian

pm2 restart "id" --log-date-format 'DD-MM HH:mm:ss.SSS' hoặc là pm2 restart "id" --time

bạn có thể kiểm tra nhật ký bằng cách

pm2 log "id" hoặc là pm2 log "appName"

để có được nhật ký cho tất cả các ứng dụng

pm2 logs


2

Đừng quên không gian trước khi bắt đầu

pm2 start npm --[space]start

Vì vậy, lệnh chính xác là:

pm2 start npm -- start

1

Thật không may, có vẻ như pm2 không hỗ trợ chức năng chính xác mà bạn yêu cầu https://github.com/Unitech/PM2/issues/1317 .

Phương án thay thế được đề xuất là sử dụng một ecosystem.jsontệp Bắt đầu với việc triển khai có thể bao gồm các thiết lập cho môi trường sản xuất và phát triển. Tuy nhiên, điều này vẫn đang sử dụng npm startđể bootstrap ứng dụng của bạn.


Ý bạn là như thế nào? However, this is still using npm start to bootstrap your app.Bạn thực sự có thể chạy npm startbằng cách sử dụng pm2?
xpepermint

1
pm2 start ./bin/www

có thể chạy

Nếu bạn muốn triển khai nhiều máy chủ, bạn có thể làm điều đó. thay vì pm2 bắt đầu npm - bắt đầu


1

Để chạy PM2 với npm startphương thức và để cung cấp cho nó name, hãy chạy nó,
pm2 start npm --name "your_app_name" -- start

Để chạy nó bằng cách chuyển định dạng ngày cho nhật ký,
pm2 start npm --name "your_name" --log-date-format 'DD-MM HH:mm:ss.SSS' -- start


0

Bây giờ, bạn có thể sử dụng sau:

pm2 start npm -- start

Theo dõi https://github.com/Unitech/pm2/issues/1317#issuecomment-220955319


Bạn có thể mở rộng câu trả lời của bạn? Lời khuyên từ Cách trả lời : Các liên kết đến các tài nguyên bên ngoài được khuyến khích, nhưng vui lòng thêm ngữ cảnh xung quanh liên kết để người dùng đồng nghiệp của bạn sẽ có ý tưởng về nó là gì và tại sao nó lại ở đó. Luôn trích dẫn phần có liên quan nhất của một liên kết quan trọng, trong trường hợp trang đích không thể truy cập được hoặc ngoại tuyến vĩnh viễn.
psychboom

0

Nó hoạt động tốt trên CentOS 7

Phiên bản PM2 4.2.1

hãy lấy hai kịch bản:

1. npm bắt đầu //server.js

pm2 start "npm -- start" --name myMainFile

2. npm chạy chính //main.js

pm2 start "npm -- run main" --name myMainFile
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.