pm2 สามารถเรียกใช้สคริปต์ 'เริ่มต้น npm' ได้หรือไม่


213

มีวิธีสำหรับ PM2 ในการเรียกใช้สคริปต์เริ่ม NPM หรือไม่คุณเพียงแค่ต้องเรียกใช้ pm2 start app.js

ดังนั้นในการพัฒนา

npm start

จากนั้นในการผลิตด้วย pm2 คุณจะต้องทำอะไรบางอย่าง

pm2 start 'npm start'

มีวิธีที่เทียบเท่าในการทำสิ่งนี้ในforever:

forever start -c "npm start" ./

นี่คือส่วนขยายของคำตอบที่ Dhaval stackoverflow.com/a/37775318/4828326 ให้ไว้ 1. ขั้นแรกเพิ่ม PM2 ให้กับ package.json ของคุณ 2. สำหรับโหมดการพัฒนาให้อัปเดตสคริปต์ json แพ็คเกจเช่นนี้: "pm2: dev": "node_modules / pm2 / bin / pm2-dev เริ่ม npm - start ",
พระราม Krishna

คำตอบ:


437

PM2 ตอนนี้รองรับการเริ่มต้น npm:

pm2 start npm -- start

ในการกำหนดชื่อให้กับกระบวนการ PM2 ให้ใช้--nameตัวเลือก:

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

5
คุณจะตั้งชื่อสำหรับกระบวนการได้อย่างไรเมื่อใช้คำสั่งนี้? ฉันพยายามใช้--name "app"แต่เพิ่งตั้งเป็น npm
silverlight513

171
pm2 start npm - ชื่อ "Your APP name" - start
Laukik Patel

7
ใครรู้วิธีการตั้งค่าnpm startในไฟล์กระบวนการ?
mqchen

1
ขอบคุณมาก!
hkg328

3
อาฉันคิดว่าฉันพบคำตอบสำหรับคำถามของฉัน มันไม่ได้เป็นสิ่งที่ PM2 หรือ NPM มันก็ดูเหมือนจะเป็นวิธีระวัง * พูดว่า "ฉันทำให้ตัวเลือกคำสั่งและต้องการที่จะเริ่มต้นการส่งผ่านข้อโต้แย้ง": unix.stackexchange.com/questions/11376/...
คริส Schmitz

96

ผู้ที่ใช้สคริปต์การกำหนดค่าเช่น.jsonไฟล์เพื่อเรียกใช้กระบวนการ pm2 สามารถใช้npm startหรือสคริปต์อื่น ๆ เช่นนี้ -

ฉันแอป-pm2.json

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

จากนั้นก็ -

pm2 start my-app-pm2.json

แก้ไข - เพื่อจัดการกรณีการใช้งานเมื่อคุณมีสคริปต์การกำหนดค่านี้ในไดเรกทอรีหลักและต้องการเปิดใช้งานแอปในไดเรกทอรีย่อยจากนั้นใช้cwdแอตทริบิวต์

สมมติว่าแอปของเราอยู่ในไดเรกทอรีย่อยที่nested-appสัมพันธ์กับไฟล์การกำหนดค่านี้จากนั้น -

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

รายละเอียดเพิ่มเติมที่นี่


1
มันทำงานอย่างไรถ้าฉันต้องการเรียกใช้สคริปต์เริ่ม npm จากโฟลเดอร์หลัก?
Gianfranco P.

1
คุณช่วยอธิบายเพิ่มเติมอีกเล็กน้อยได้ไหม? ฉันคิดว่าคุณกำลังถามว่าจะ เริ่ม npm ได้อย่างไร จากนอกไดเรกทอรีโครงการ? .
Jyotman Singh

ฉันใช้สคริปต์การกำหนดค่าเพื่อเรียกใช้แอปหลายโหนดที่อยู่ในโฟลเดอร์ย่อย package.json ที่มีstartข้อมูลสคริปต์อยู่ในหนึ่งในนั้น ดูส่วนสำคัญนี้: gist.github.com/gianpaj/04c5680a8275616aac5e46374e07f673เมื่อฉันเรียกใช้งานนี้ก็ไม่ทราบว่าnpmควรเรียกใช้จากที่ใด ขอบคุณ
Gianfranco P.

3
@GianfrancoP คุณสามารถใช้cwdคุณสมบัติ ตรวจสอบคำตอบแก้ไขของฉัน :)
Jyotman ซิงห์

ฉันพยายามใช้ sudo npm และแสดงข้อผิดพลาดการเข้าถึงเพื่อสร้างไดเรกทอรีที่ยากลำบากฉันได้ให้สิทธิ์ทั้งหมดแก่ผู้ใช้ในฐานะ root และยังใช้คำสั่ง pm2 เป็นsudo pm2 start config.json
Mr AJ

39

ใช่. pm2 start npm --no-automation --name {app name} -- run {script name}ใช้ มันได้ผล. การ--no-automationตั้งค่าสถานะมีเนื่องจากไม่มี PM2 จะไม่รีสตาร์ทแอปของคุณเมื่อเกิดปัญหา


1
คุณมีความคิดใด ๆ วิธีใช้การตั้งค่าสถานะนี้ภายในไฟล์กำหนดค่าระบบนิเวศ.jsหรือไม่?
Tom

1
UPDATE: ตกลงฉันพบว่าคุณต้องระบุ "ระบบอัตโนมัติ": false
Tom

@twigg pm2 --help | grep 'no-autom'ส่งคืนหนึ่งบรรทัดสำหรับฉันในเวอร์ชัน 1.0.2
jcollum


25

ฉันเขียนเชลล์สคริปต์ด้านล่าง (ชื่อstart.sh) เพราะฉันpackage.jsonมีprestartตัวเลือก npm startดังนั้นผมจึงต้องการที่จะทำงาน

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

จากนั้นเริ่มstart.shโดย pm2

pm2 start start.sh --name appNameYouLike

เยี่ยมมาก น่าเสียดายที่นี่ไม่ทำงานเมื่อใช้startOrRestartคำสั่ง
xpepermint

@xpepermint เพียงใช้แฟล็ก -f ในตอนท้าย มันกำลังเริ่มต้น (นั่นคือมันจะเริ่มต้นใหม่ถ้าเริ่มต้นแล้ว)
Zeeno

16

ใช่เราทำได้แล้วตอนนี้ pm2 รองรับการเริ่มต้น npm - ชื่อแอปสปีชีส์

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

นี่คือคำตอบที่ช่วยฉันได้จริงๆ ขอบคุณมาก.
Adesh Kumar

9

ดูเพื่อเปิดใช้งานการทำคลัสเตอร์:

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

คุณคิดอย่างไร?


สิ่งที่ไม่-i 0ทำอะไร?
Johhan Santana

1
เริ่มต้นกระบวนการสูงสุดโดยขึ้นอยู่กับ CPU ที่มีอยู่ (โหมดคลัสเตอร์)
jdnichollsc

7

หากคุณใช้ PM2 ผ่านโมดูลโหนดแทนที่จะเป็นแบบทั่วโลกคุณจะต้องตั้งค่าinterpreter: 'none'เพื่อให้โซลูชั่นด้านบนทำงานได้ เอกสารที่เกี่ยวข้องที่นี่

ในecosystem.config.js:

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

7

ฉันต้องการเรียกใช้สคริปต์ npm ที่ระบุในแอปของฉันใน pm2 (สำหรับแต่ละ env) ในกรณีของฉันมันเป็นเมื่อฉันสร้างบริการทดสอบ / ทดสอบ

คำสั่งที่ใช้งานได้สำหรับฉัน (args จะต้องส่งต่อด้วยวิธีนั้น):

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

ตัวอย่าง:

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

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

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

หวังว่ามันจะช่วย



3

คุณต้องระบุชื่อแอปที่นี่เช่น myapp

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

คุณสามารถตรวจสอบได้โดย

pm2 list

คุณสามารถเพิ่มเวลาได้

pm2 restart "id" --log-date-format 'DD-MM HH:mm:ss.SSS' หรือ pm2 restart "id" --time

คุณสามารถตรวจสอบบันทึกได้

pm2 log "id" หรือ pm2 log "appName"

เพื่อรับบันทึกสำหรับแอพทั้งหมด

pm2 logs


2

อย่าลืมพื้นที่ก่อนเริ่ม

pm2 start npm --[space]start

ดังนั้นคำสั่งที่ถูกต้องคือ:

pm2 start npm -- start

1

แต่น่าเสียดายที่มันก็ดูเหมือนว่า PM2 ไม่สนับสนุนฟังก์ชันการทำงานที่แน่นอนที่คุณร้องขอhttps://github.com/Unitech/PM2/issues/1317

ทางเลือกที่เสนอคือการใช้ecosystem.jsonไฟล์เริ่มต้นด้วยการปรับใช้ซึ่งอาจรวมถึงการตั้งค่าสำหรับการผลิตและสภาพแวดล้อม dev อย่างไรก็ตามสิ่งนี้ยังคงใช้npm startเพื่อบู๊ตแอปของคุณ


คุณหมายถึงอะไร? However, this is still using npm start to bootstrap your app.คุณสามารถเรียกใช้จริงnpm startโดยใช้pm2?
xpepermint

1
pm2 start ./bin/www

สามารถทำงานได้

หากคุณต้องการปรับใช้เซิร์ฟเวอร์หลายเครื่องคุณสามารถทำได้ แทน pm2 เริ่ม npm - เริ่มต้น


1

หากต้องการเรียกใช้ PM2 ด้วยnpm startเมธอดและให้ a nameให้เรียกใช้
pm2 start npm --name "your_app_name" -- start

หากต้องการเรียกใช้โดยส่งผ่านรูปแบบวันที่สำหรับบันทึก
pm2 start npm --name "your_name" --log-date-format 'DD-MM HH:mm:ss.SSS' -- start


0

ตอนนี้คุณสามารถใช้หลังจาก:

pm2 start npm -- start

ติดตามโดย https://github.com/Unitech/pm2/issues/1317#issuecomment-220955319


คุณสามารถขยายคำตอบของคุณ? คำแนะนำจากวิธีตอบ : ลิงก์ไปยังแหล่งข้อมูลภายนอกได้รับการสนับสนุน แต่โปรดเพิ่มบริบทรอบ ๆ ลิงก์เพื่อให้ผู้ใช้ของคุณมีความคิดว่ามันคืออะไรและเพราะอะไร อ้างถึงส่วนที่เกี่ยวข้องที่สุดของลิงค์สำคัญเสมอในกรณีที่เว็บไซต์เป้าหมายไม่สามารถเข้าถึงหรือออฟไลน์อย่างถาวร
moodboom

0

มันทำงานได้ดีบน CentOS 7

PM2 เวอร์ชั่น 4.2.1

ลองทำสองสถานการณ์:

1. npm start //server.js

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

2. npm run main //main.js

pm2 start "npm -- run main" --name myMainFile
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.