Pm2 'npm start' komut dosyasını çalıştırabilir mi?


213

PM2'nin bir npm başlangıç ​​komut dosyası çalıştırmasının bir yolu var mı yoksa sadece çalıştırmanız mı gerekiyor? pm2 start app.js

Yani geliştirme aşamasında

npm start

Sonra pm2 ile üretimde,

pm2 start 'npm start'

Bunu yapmak için eşdeğer bir yol var forever:

forever start -c "npm start" ./

Bu, Dhaval tarafından verilen Yanıtın uzantısı stackoverflow.com/a/37775318/4828326 1. İlk olarak pm2'yi paketinize ekleyin. Json 2. Geliştirme modu için, json komut dosyanızı şu şekilde güncelleyin: "pm2: dev": "node_modules / pm2 / bin / pm2-dev start npm - start ",
Rama Krishna

Yanıtlar:


437

PM2 artık npm başlatmayı destekliyor:

pm2 start npm -- start

PM2 işlemine bir ad atamak için şu --nameseçeneği kullanın:

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

5
Bu komutu kullanırken işlem için bir ad nasıl belirleyebilirsiniz? Kullanmayı denedim --name "app"ama sadece npm olarak ayarlayın.
silverlight513

171
pm2 başlangıç ​​npm - "APP Adınız" adı - başlangıç
Laukik Patel

7
npm startSüreç dosyasında nasıl ayarlanacağını bilen var mı?
mqchen

1
ÇOK TEŞEKKÜR EDERİM!
hkg328 15:18

3
ah, sanırım sorumun cevabını buldum. Bu bir pm2 veya npm şey değil, "Komut seçenekleri vermeyi tamamladım
Chris Schmitz

96

.jsonPm2 işlemini çalıştırmak için bir dosya gibi bir yapılandırma komut dosyası kullananlar npm startveya bunun gibi herhangi bir komut dosyasını kullanabilirler -

benim-app-pm2.json

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

Sonra basitçe -

pm2 start my-app-pm2.json

Düzenle - Bir üst dizinde bu yapılandırma komut dosyasına sahip olduğunuzda ve alt dizinde bir uygulama başlatmak istediğinizde, kullanım durumunu işlemek için cwdözelliği kullanın .

Uygulamamızın nested-appbu yapılandırma dosyasına göre alt dizinde olduğunu varsayarsak -

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

Daha fazla ayrıntı burada .


1
Bir üst klasörden start npm komut dosyasını çalıştırmak istersem bu nasıl çalışır?
Gianfranco P.3

1
Biraz daha ayrıntı verebilir misiniz? Proje dizininin dışından npm start nasıl çalıştırılacağını sorduğunuzu varsayıyorum. .
Jyotman Singh

Alt klasörlerde bulunan birden fazla düğüm uygulamasını çalıştırmak için yapılandırma komut dosyasını kullanıyorum. startKomut dosyası bilgilerinin bulunduğu package.json bunlardan birinde. Bu özete bakın: gist.github.com/gianpaj/04c5680a8275616aac5e46374e07f673 Bunu npmçalıştırdığımda nereden kaçması gerektiğini bilmiyor . Teşekkürler
Gianfranco P.

3
@GianfrancoP. cwdÖzniteliği kullanabilirsiniz . Düzenlenmiş cevabımı kontrol et :)
Jyotman Singh

Sudo npm kullanmaya çalıştım ve bir dizin oluşturmak için erişim hatası gösterir zor kök olarak kullanıcıya tüm izni vermiş ve aynı zamanda pm2 komutu olarak çalışansudo pm2 start config.json
Sayın AJ

39

Evet. Kullanın pm2 start npm --no-automation --name {app name} -- run {script name}. İşe yarıyor. --no-automationBayrak var o kilitlendiğinde PM2 uygulamanızı yeniden başlatılmaz onsuz çünkü.


1
Bu bayrağı ecosystem.js yapılandırma dosyasının içinde nasıl kullanacağınız hakkında bir fikriniz var mı?
Tom

1
GÜNCELLEME: Tamam, "otomasyon" belirtmeniz gerektiğini buldum: yanlış.
Tom

@twigg pm2 --help | grep 'no-autom', 1.0.2 sürümünde benim için bir satır döndürüyor
jcollum

27

Kullanmak npm run

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


25

Aşağıda kabuk komut dosyası yazdım (adlı start.sh). Benim Çünkü package.jsonsahiptir prestartseçenek. Bu yüzden koşmak istiyorum npm start.

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

Sonra start.shpm2 ile başlayın .

pm2 start start.sh --name appNameYouLike

Bu iyi. Ne yazık ki bu startOrRestartkomut kullanılırken çalışmaz .
xpepermint

@xpepermint sonunda -f bayrağını kullanın. Bir başlamayı zorlar. (örneğin, daha önce başlamışsa yeniden başlayacaktır)
Zeeno

16

Evet, şimdi pm2 destek npm başlangıç, tür adı app adı.

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

Bu bana gerçekten yardımcı olan cevap. Çok teşekkürler.
Adesh Kumar

9

Kümelemeyi etkinleştirmek için bkz:

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

Ne düşünüyorsun?


ne gelmez -i 0mi?
Johhan Santana

1
Kullanılabilir CPU'lara bağlı olarak maksimum işlemleri başlatma (küme modu)
jdnichollsc

7

PM2'yi global yerine düğüm modülleri aracılığıyla kullanıyorsanız interpreter: 'none', yukarıdaki çözümlerin çalışması için ayarlamanız gerekir . İlgili dokümanlar burada .

İçinde ecosystem.config.js:

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

7

Benim app pm2 (her env için) belirli bir npm komut dosyası çalıştırmak gerekiyordu Benim durumumda, bir evreleme / test hizmeti oluştururken oldu

Benim için çalışan komut (argümanlar bu şekilde iletilmelidir):

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

örnekler:

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

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

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

Umarım yardımcı olmuştur


4

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

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

Diğerleri yapmadığında bu benim için çalıştı


3

burada myapp gibi uygulama adı sağlamanız gerekiyor

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

kontrol edebilirsin

pm2 list

ayrıca zaman da ekleyebilirsin

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

günlükleri kontrol edebilirsin

pm2 log "id" veya pm2 log "appName"

tüm uygulama için günlükleri almak

pm2 logs


2

Başlamadan önce boşluğu unutma

pm2 start npm --[space]start

böylece doğru komut:

pm2 start npm -- start

1

Ne yazık ki, pm2, istediğiniz tam işlevselliği desteklemiyor gibi görünüyor https://github.com/Unitech/PM2/issues/1317 .

Önerilen alternatif, üretim ve geliştirme ortamları için kurulumları içerebilecek konuşlandırmaya başlarken bir ecosystem.jsondosya kullanmaktır . Ancak, bu hala uygulamanızı önyüklemek için kullanıyor .npm start


Bununla ne demek istiyorsun? However, this is still using npm start to bootstrap your app.Aslında npm startkullanarak koşabilir pm2misin?
xpepermint

1
pm2 start ./bin/www

koşabilir

birden fazla sunucu dağıtımı yapmak istiyorsanız bunu yapabilirsiniz. pm2 yerine start npm - start


1

PM2 npm startyöntemiyle çalıştırmak ve a vermek için name,
pm2 start npm --name "your_app_name" -- start

Günlükler için tarih biçimini geçirerek çalıştırmak için,
pm2 start npm --name "your_name" --log-date-format 'DD-MM HH:mm:ss.SSS' -- start


0

Şimdi, sonra kullanabilirsiniz:

pm2 start npm -- start

Takip eden https://github.com/Unitech/pm2/issues/1317#issuecomment-220955319


Cevabınızı genişletebilir misiniz? Nasıl yanıtlanır : Tavsiye Dış kaynaklara bağlantılar teşvik edilir, ancak diğer kullanıcıların ne olduğunu ve neden orada olduğunu bilmeleri için lütfen bağlantının çevresine bağlam ekleyin. Hedef siteye erişilemiyorsa veya kalıcı olarak çevrimdışı olursa, her zaman önemli bir bağlantının en alakalı kısmını belirtin.
moodboom

0

CentOS 7'de iyi çalışıyor

PM2 sürüm 4.2.1

iki senaryoyu ele alalım:

1. npm başlangıç //server.js

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

2. npm, main //main.js dosyasını çalıştırın

pm2 start "npm -- run main" --name myMainFile
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.