Bisakah pm2 menjalankan skrip 'npm start'

214

Apakah ada cara bagi pm2 untuk menjalankan skrip start npm atau Anda hanya perlu menjalankan pm2 start app.js

Begitu juga dalam pengembangan

npm start

Kemudian dalam produksi dengan PM2 Anda akan menjalankan sesuatu seperti

pm2 start 'npm start'

Ada cara yang setara untuk melakukan ini di forever:

forever start -c "npm start" ./
svnm
sumber
Ini adalah ekstensi untuk Jawaban yang diberikan oleh Dhaval stackoverflow.com/a/37775318/4828326 1. Pertama tambahkan pm2 ke package.json Anda 2. Untuk mode pengembangan, perbarui skrip paket json Anda seperti ini: "pm2: dev": "node_modules / pm2 / bin / pm2-dev start npm - start ",
Rama Krishna

Jawaban:

438

PM2 sekarang mendukung start npm:

pm2 start npm -- start

Untuk menetapkan nama ke proses PM2, gunakan --nameopsi:

pm2 start npm --name "app name" -- start
Dhaval Chauhan
sumber
5
Bagaimana Anda bisa menetapkan nama untuk proses saat menggunakan perintah ini? Saya mencoba menggunakan --name "app"tetapi hanya mengaturnya ke npm.
silverlight513
171
pm2 start npm --name "Your APP Name" - start
Laukik Patel
7
Adakah yang tahu cara mengatur npm startfile proses?
mqchen
1
TERIMA KASIH BANYAK!
hkg328
3
ah, saya pikir saya menemukan jawaban untuk pertanyaan saya. Ini bukan hal pm2 atau npm, tampaknya menjadi cara * nix mengatakan "Saya sudah selesai memberikan opsi perintah dan ingin mulai melewati argumen": unix.stackexchange.com/questions/11376/…
Chris Schmitz
96

Mereka yang menggunakan skrip konfigurasi seperti .jsonfile untuk menjalankan proses pm2 dapat menggunakan npm startatau skrip lain seperti ini -

my-app-pm2.json

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

Maka sederhana -

pm2 start my-app-pm2.json

Edit - Untuk menangani use case ketika Anda memiliki skrip konfigurasi ini di direktori induk dan ingin meluncurkan aplikasi di sub-direktori kemudian gunakan cwdatribut.

Dengan asumsi aplikasi kita ada di dalam sub-direktori nested-app relatif terhadap file konfigurasi ini -

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

Lebih detail di sini .

Jyotman Singh
sumber
1
bagaimana cara kerjanya jika saya ingin menjalankan skrip start npm dari folder induk?
Gianfranco P.
1
Bisakah Anda menguraikan lebih banyak? Saya berasumsi Anda bertanya Bagaimana menjalankan npm mulai dari luar direktori proyek? .
Jyotman Singh
Saya menggunakan skrip konfigurasi untuk menjalankan beberapa aplikasi simpul yang ada di dalam sub-folder. Package.json dengan startinformasi skrip ada di salah satunya. Lihat intisari ini: gist.github.com/gianpaj/04c5680a8275616aac5e46374e07f673 Ketika saya menjalankan ini, ia tidak tahu npmharus lari dari mana . Thx
Gianfranco P.
3
@GianfrancoP. Anda bisa menggunakan cwdatribut. Periksa jawaban saya yang diedit :)
Jyotman Singh
Saya mencoba menggunakan sudo npm dan itu menunjukkan kesalahan akses untuk membuat direktori yang sulit Saya telah memberikan semua izin kepada pengguna sebagai root dan juga menjalankan perintah pm2 sebagaisudo pm2 start config.json
Mr AJ
39

Iya. Gunakan pm2 start npm --no-automation --name {app name} -- run {script name}. Berhasil. The --no-automationflag ada karena tanpa itu PM2 tidak akan me-restart aplikasi Anda ketika crash.

jcollum
sumber
1
Apakah Anda tahu cara menggunakan flag ini di dalam file konfigurasi ekosistem.js?
Tom
1
UPDATE: Oke saya menemukannya Anda perlu menentukan "otomatisasi": false.
Tom
@twigg pm2 --help | grep 'no-autom'mengembalikan satu baris untuk saya dalam versi 1.0.2
jcollum
27

Menggunakan npm run

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

carkod
sumber
25

Saya menulis skrip shell di bawah ini (bernama start.sh). Karena saya package.jsonpunya prestartpilihan. Jadi saya ingin lari npm start.

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

Kemudian, mulailah start.shdengan pm2.

pm2 start start.sh --name appNameYouLike
peccu
sumber
Itu bagus. Sayangnya ini tidak berfungsi saat menggunakan startOrRestartperintah.
xpepermint
@ xpepermint cukup gunakan flag -f di akhir. Ini memaksa awal. (Yaitu akan restart jika sudah mulai)
Zeeno
16

Ya kita bisa, sekarang pm2 mendukung mulai npm, --name ke nama spesies aplikasi.

pm2 start npm --name "app" -- start
KARTHIKEYAN.A
sumber
Inilah jawaban yang sangat membantu saya. Terima kasih banyak.
Adesh Kumar
9

Lihat untuk mengaktifkan pengelompokan:

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

Bagaimana menurut anda?

jdnichollsc
sumber
apa yang -i 0dilakukan?
Johhan Santana
1
Mulai proses maksimum tergantung pada CPU yang tersedia (mode kluster)
jdnichollsc
7

Jika Anda menggunakan PM2 melalui modul simpul alih-alih secara global, Anda harus mengatur interpreter: 'none'agar solusi di atas berfungsi. Dokumen terkait di sini .

Dalam ecosystem.config.js:

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

Saya perlu menjalankan skrip npm khusus pada aplikasi saya di PM2 (untuk setiap env) Dalam kasus saya, itu ketika saya membuat layanan staging / tes

Perintah yang bekerja untuk saya (argumen harus diteruskan seperti itu):

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

contoh:

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

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

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

Semoga ini bisa membantu

Tomer Omri
sumber
4

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

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

Ini bekerja untuk saya ketika yang lain tidak

Luke Robertson
sumber
3

Anda perlu memberikan nama aplikasi di sini seperti myapp

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

Anda dapat memeriksanya dengan

pm2 list

Anda juga dapat menambahkan waktu

pm2 restart "id" --log-date-format 'DD-MM HH:mm:ss.SSS' atau pm2 restart "id" --time

Anda dapat memeriksa log dengan

pm2 log "id" atau pm2 log "appName"

untuk mendapatkan log untuk semua aplikasi

pm2 logs

Pharaj Ali
sumber
2

Jangan lupa ruang sebelum memulai

pm2 start npm --[space]start

jadi perintah yang benar adalah:

pm2 start npm -- start
Vidura Adikari
sumber
1

Sayangnya, tampaknya pm2 tidak mendukung fungsi persis yang Anda minta https://github.com/Unitech/PM2/issues/1317 .

Alternatif yang diusulkan adalah menggunakan ecosystem.jsonfile Memulai penyebaran yang dapat mencakup pengaturan untuk lingkungan produksi dan pengembangan. Namun, ini masih digunakan npm startuntuk mem-bootstrap aplikasi Anda.

snozza
sumber
Bagaimana apanya? However, this is still using npm start to bootstrap your app.Bisakah Anda benar-benar menjalankan npm startmenggunakan pm2?
xpepermint
1
pm2 start ./bin/www

bisa berlari

jika Anda ingin menggunakan beberapa server, Anda dapat melakukannya. bukannya pm2 mulai npm - mulai

劉 謹 賢
sumber
1

Untuk menjalankan PM2 dengan npm startmetode dan untuk memberikannya name, jalankan ini,
pm2 start npm --name "your_app_name" -- start

Untuk menjalankannya dengan meneruskan format tanggal untuk log,
pm2 start npm --name "your_name" --log-date-format 'DD-MM HH:mm:ss.SSS' -- start

Anish Nair
sumber
0

Sekarang, Anda dapat menggunakan setelah:

pm2 start npm -- start

Ikuti oleh https://github.com/Unitech/pm2/issues/1317#issuecomment-220955319

Minh Dao
sumber
Bisakah Anda memperluas jawaban Anda? Saran dari Bagaimana menjawab : Tautan ke sumber daya eksternal dianjurkan, tapi tolong tambahkan konteks di sekitar tautan sehingga teman-teman Anda akan mengetahui apa itu dan mengapa ada di sana. Selalu kutip bagian yang paling relevan dari tautan penting, jika situs target tidak dapat dijangkau atau offline secara permanen.
moodboom
0

Ini berfungsi dengan baik pada CentOS 7

PM2 versi 4.2.1

mari kita ambil dua skenario:

1. npm mulai //server.js

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

2. npm menjalankan //main.js utama

pm2 start "npm -- run main" --name myMainFile
M. Hamza Rajput
sumber