0

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

该脚本执行以下操作:

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

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

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

该节点使用的默认 shell 是 sh,并且无法更改。

我有哪些选择?

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

4

1 回答 1

0

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

  • 回显脚本 > /dev/shm/文件名
  • chmod +x /dev/shm/文件名
  • nohup /dev/shm/文件名

然后在脚本中:

killall node

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

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

于 2011-08-26T18:54:12.107 回答