首页 > 解决方案 > 在启动时运行多个 npm 脚本

问题描述

我有一个运行快速应用程序和反应应用程序的服务器。我需要在启动时启动这两个应用程序。所以我在 rc.local 上添加了两行,但似乎只有第一行运行,第二行没有。为什么会这样,我该如何解决?

标签: linuxcentosboot

解决方案


就像在任何其他脚本中一样,第二个命令只会在第一个命令完成后执行。当第一个命令应该永远运行时,这可能不是您想要的。

如果您希望第二个命令在第一个命令完成之前执行,并且如果您希望脚本在第二个命令完成之前退出,那么您必须安排这些命令在后台运行。

所以,至少,而不是

my-first-command
my-second-command

你要:

my-first-command &
my-second-command &

但是,最好做一些更复杂的事情,除了将命令置于后台之外,还将命令的工作目录置于文件系统的根目录,断开命令的输入与控制台的连接,提供其标准输出和标准错误流到syslog服务(通常会将数据附加到/var/log/syslog)并保护它免受意外信号的影响。像:

( cd / && nohup sh -c 'my-first-command 2>&1 | logger -t my-first-command &' </dev/null >/dev/null 2>&1 )

对于第二个命令也是如此。

行尾的额外重定向是为了防止nohup发出不需要的信息消息和创建未使用的nohup.out文件。2>&1在确定命令的其余部分是正确的并且按照您希望的方式运行之前,您可能希望保留最终结果。当您到达显示唯一消息的地步时,nohup: redirecting stderr to stdout您可以恢复2>&1以摆脱该消息。


推荐阅读