pm2是否可以运行“ npm start”脚本


212

pm2是否可以运行npm start脚本,还是只需要运行 pm2 start app.js

所以在发展中

npm start

然后在pm2的生产环境中运行类似

pm2 start 'npm start'

有一种等效的方法可以做到这一点forever

forever start -c "npm start" ./

这是Dhaval stackoverflow.com/a/37775318/4828326提供的Answer的扩展。1 .首先将pm2 添加到您的package.json中。2.对于开发模式,请像下面这样更新您的包json脚本:“ pm2:dev”:“ node_modules / pm2 / bin / pm2-dev start npm-start“,
拉玛·克里希纳

Answers:


436

PM2现在支持npm start:

pm2 start npm -- start

要将名称分配给PM2进程,请使用以下--name选项:

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

5
使用此命令时如何为进程设置名称?我尝试使用,--name "app"但只是将其设置为npm。
silverlight513

171
pm2 start npm --name“您的APP名称”
-start

7
有人知道如何npm start在过程文件中进行设置吗?
mqchen

1
非常感谢!
hkg328

3
嗯,我想我找到了问题的答案。这不是pm2或npm的事情,它似乎是* nix的一种说法:“我已经完成了命令选项的设置并想开始传递参数”:unix.stackexchange.com/questions/11376/…
克里斯·施密茨

96

那些使用配置脚本(例如.json文件)来运行pm2进程的用户可以使用npm start或其他任何类似的脚本-

my-app-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
如果我想从父文件夹运行start npm脚本,该如何工作?
Gianfranco P.

1
您能详细说明一下吗?我假设您在问如何 从项目目录外部运行npm start
Jyotman Singh

我正在使用配置脚本来运行子文件夹中的多个节点应用程序。其中包含start脚本信息的package.json 在其中之一中。看到这个要点:gist.github.com/gianpaj/04c5680a8275616aac5e46374e07f673当我运行它时,它不知道npm从哪里运行。Thx
Gianfranco P.

3
@GianfrancoP。您可以使用该cwd属性。检查我编辑的答案:)
Jyotman Singh

我尝试使用sudo npm,它显示访问错误以创建目录,我已经以root身份授予用户所有权限,并且还以pm2命令的身份运行sudo pm2 start config.json
AJ先生


27

使用 npm run

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


25

我在下面编写了shell脚本(名为start.sh)。因为我package.jsonprestart选择。所以我要跑步npm start

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

然后,从start.shpm2 开始。

pm2 start start.sh --name appNameYouLike

真好。不幸的是,使用该startOrRestart命令时此方法不起作用。
xpepermint 2015年

@xpepermint仅在末尾使用-f标志。它迫使一个开始。(即,如果已经开始,它将重新启动)
Zeeno,

16

是的,我们可以,现在pm2支持npm start,--name到种类应用程序名称。

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

这是真正帮助我的答案。非常感谢。
Adesh Kumar,


7

如果通过节点模块而不是全局使用PM2,则需要进行设置interpreter: 'none'才能使上述解决方案起作用。相关文档在这里

ecosystem.config.js

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

7

我需要在pm2中的应用程序上运行特定的npm脚本(对于每个环境),就我而言,这是我创建登台/测试服务的时间

对我有用的命令(必须以这种方式转发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"

希望能有所帮助


4

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

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

其他人没有的时候这对我有用


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



1

不幸的是,似乎pm2不支持您请求的确切功能https://github.com/Unitech/PM2/issues/1317

建议的替代方案是使用ecosystem.json文件“ 部署入门”,其中可能包括针对生产和开发环境的设置。但是,这仍npm start用于引导您的应用程序。


你是什​​么意思?However, this is still using npm start to bootstrap your app.您可以实际npm start使用运行pm2吗?
xpepermint

1
pm2 start ./bin/www

可以跑步

如果您想部署多个服务器,则可以这样做。代替pm2 start npm-开始


1

要使用npm startmethod 运行PM2 并为其添加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

在CentOS 7上运行正常

PM2版本4.2.1

让我们采取两种情况:

1. npm start //server.js

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

2. npm运行main //main.js

pm2 start "npm -- run main" --name myMainFile
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.