我有一个服务器,运行一个express应用和一个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
以摆脱该消息。