我有一个运行快速应用程序和 react 应用程序的服务器。我需要在启动时启动这两个应用程序。
所以我在 rc.local 上添加了两行,但似乎只有第一行运行,第二行没有。为什么会这样,我该如何解决?
最佳答案
就像在任何其他脚本中一样,第二个命令只会在第一个命令完成后执行。当第一个命令应该永远运行时,这可能不是您想要的。
如果您希望第二个命令在第一个命令完成之前执行,并且如果您希望脚本在第二个命令完成之前退出,那么您必须安排这些命令在后台运行。
所以,至少,而不是
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
摆脱该消息。
关于linux - 在启动时运行多个 npm 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61618333/