pm2 - 如果没有启动如何启动,如果启动则杀死并启动

Bry*_*can 7 windows node.js pm2

我试图启动pm2如果它没有运行,或者杀死它并启动它是否如何,我怎么能在WINDOWS命令行界面中实现这种行为?

在linux中有很多使用grep的解决方案,但对于windows没有任何解决方案,有关如何获得此行为的任何想法?

文档说pm2 start -f app.js会杀死并启动应用程序,但它实际上只是创建另一个实例.

小智 8

你可以做这样的事情

pm2 delete your_app_name || : && pm2 start index.js -i 1 --name 'your_app_name'
Run Code Online (Sandbox Code Playgroud)

:是一个 null 运算符,返回 0 成功退出代码。因此,无论发生什么,pm2 start命令都会执行(即使pm2 delete失败,对于应用程序尚不存在的情况)。


tre*_*005 7

似乎没有“单一命令”的方式来做到这一点,这在许多开发环境中相当重要,所以这里有一些选项:

将soyuka的建议写在一行中。

pm2 stop myprocess; pm2 start myprocess.js
Run Code Online (Sandbox Code Playgroud)

这会输出错误,但它会起作用。

他们还在其生态系统工具中内置了此选项。要使用它,请进入您正在使用的文件夹并运行

pm2 ecosystem
Run Code Online (Sandbox Code Playgroud)

这将生成一个文件ecosystem.config.js,您需要确保其中的名称和脚本正确。

然后您可以使用命令:

pm2 startOrReload ecosystem.config.js
Run Code Online (Sandbox Code Playgroud)

不过,我也想查看我的日志记录,所以我使用以下命令:

pm2 flush && pm2 startOrReload ecosystem.config.js && pm2 log
Run Code Online (Sandbox Code Playgroud)

这也将刷新日志,这样您就不会看到旧日志。


Gar*_*One 6

用这个:

pm2 delete main.js 2> /dev/null &&  pm2 start main.js
Run Code Online (Sandbox Code Playgroud)

这部分:2> /dev/null- 将简单地将 stderr 重定向到/dev/null,意味着无处可去。

  • 如果脚本未运行,这将使脚本失败,请尝试: pm2 delete main.js 2> /dev/null || 真的 (5认同)

soy*_*uka 3

我会这样做:

pm2 stop myprocess.js #this will just say process not found
pm2 start myprocess.js
Run Code Online (Sandbox Code Playgroud)

或者如果你想清除所有内容:

pm2 kill
pm2 stop
Run Code Online (Sandbox Code Playgroud)

如果您想要更高级的可能性,请查看pm2 api

  • 您好,“找不到进程”部分导致错误,导致我的脚本的下一部分无法执行... (12认同)
  • 尝试 pm2 stop myprocess.js || true - 因此控制脚本永远不会看到任何错误代码 (2认同)