【问题标题】:Starting a new screen session to run a script that starts another one启动一个新的屏幕会话来运行一个启动另一个的脚本
【发布时间】:2013-09-10 00:30:46
【问题描述】:

我正在尝试使用 node.js 制作一个需要能够提取新更新并自行重新启动的程序。为此,我制作了一个包含以下代码的 auto.sh 脚本:

screen -S GNode -X quit
screen -dmS GNode -L node server

不幸的是,当我尝试从节点运行该脚本时,似乎发生的是第一行运行并且我的节点应用程序关闭(因为它正在该会话中运行)但是第二行没有得到被执行了,这很糟糕。

我最终做的是使用命令运行另一个名为 ScriptRunner 的屏幕会话

screen -dmS ScriptRunner sh auto.sh

但由于某种原因,当我运行该命令然后检查打开的屏幕会话时,没有。所以第一行再次被执行,但第二行没有。这似乎不是我的节点程序的问题,因为当我直接在终端中运行最后一个命令时,会发生同样的事情。

有谁知道可能出了什么问题?我对 Linux 和终端的东西很陌生。

【问题讨论】:

  • 你可以在没有会话的情况下只运行screen -dmS GNode -L node server 吗?通过auto.sh,而不是从终端手动。
  • 正如我所说,只有第一行被执行。终止正在运行脚本的屏幕会话的那个。
  • 我只是在考虑可能是screen -S GNode -X quit 导致screen -dmS GNode -L node server 无法运行,这就是为什么最好验证screen -dmS GNode -L node server 即使单独运行也确实不起作用。只要确保没有会话正在运行,您必须先退出它。
  • 它单独工作。事实上,当我从终端调用我的脚本时(所以调用它的会话不会终止)它按预期工作。

标签: linux node.js bash terminal


【解决方案1】:

尝试在运行下一个会话之前添加延迟:

screen -S GNode -X quit
sleep 10s  ## You can adjust this value.
screen -dmS GNode -L node server

【讨论】:

  • 我会试一试,但为什么我手动运行脚本时它会起作用?
  • 看起来没什么区别。
  • @LukaHorvat 也许下一个屏幕命令运行得太快,没有给上一个会话足够的时间退出。
  • 我明白了。对不起,如果它没有帮助。
  • @LukaHorvat 也许您正在以不同的用户身份运行它。尝试添加whoami >/tmp/whoami.txt,运行后查看文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 1970-01-01
  • 2015-03-22
相关资源
最近更新 更多