【问题标题】:Detach command from current shell从当前 shell 中分离命令
【发布时间】:2011-08-26 18:02:42
【问题描述】:

我有一个通过 child_process.exec 执行命令的 nodejs 服务器。一个这样的命令会重新启动节点实例(以及其他一些事情)。

脚本执行如下操作:

  • 杀死节点
  • 杀死程序节点使用
  • 清除日志
  • 重启程序节点使用
  • 重启节点

我知道这不是最好的方法,但我的手被束缚了(这是一个已发布的软件版本,我们无法在下一个版本之前进行重组)。

发生的情况是,当我运行命令时,它会杀死节点,然后脚本的其余部分就会死掉。

node 使用的默认 shell 是 sh,不能更改。

我有哪些选择?

服务器以root身份运行,所以不会有任何权限问题。我想我必须以某种方式启动一个新的外壳,但我不完全确定如何做到这一点。我想成功退出当前的 shell,但这不是必需的,只要我能将整个脚本与当前的 shell 分开即可。

【问题讨论】:

  • 阅读 nohup 的手册页,它用于从当前 shell 中分离命令。
  • @tawman - 没有爱。它不允许当前 shell 结束。我在脚本中设置了 5 秒超时,即使我使用 nohup 调用它,我仍然有 5 秒超时。
  • 您可能需要考虑输入、输出和标准错误的文件句柄。维基百科页面有一些很好的例子:en.wikipedia.org/wiki/Nohup
  • 我想我可以在脚本中尝试kill -9ing shell。
  • 试过kill -9kill -15,还是没有爱。我知道进程ID是正确的。 killall node 虽然有效。有没有办法干净利落地退出?

标签: node.js exec child-process


【解决方案1】:

经过一番辛劳和心碎,这就是成功的模式:

  • echo 脚本 > /dev/shm/filename
  • chmod +x /dev/shm/文件名
  • nohup /dev/shm/文件名

然后在脚本中:

killall node

这是一种技术含量很低的解决问题的方法,当然不是最佳的,但它确实有效。由于使用了 nohup,所以它不会在 parent 死亡时死亡。这意味着所有脚本都将运行。

事实证明,我还有另一个使事情复杂化的错误,此后已修复。

【讨论】:

  • 我觉得应该是'nohup'
猜你喜欢
  • 2015-03-31
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
  • 2017-11-25
  • 2017-03-19
  • 2010-11-19
相关资源
最近更新 更多