我在Windows XP 32位主机上的VirtualBox中运行turnkey-node(Debian Wheezy)设备。
在Debian中,我做了一些修改,以便它运行我自己的NodeJS应用程序,而不是默认的。
我还修改了示例run.sh
脚本,以便运行script
命令而不是直接运行node
,然后运行node
以便我可以将其输出记录到文件和特技节点,认为它正在使用TTY,以便在日志输出中保留颜色转义序列,如here,here和here所述。
这一切都很有效,除非是时候关闭nodejs服务 - script
,sh
和node
进程都会在服务停止后继续存在。
为什么会发生这种情况?我猜测包含nodejs init script并不打算像这样使用,但我不知道改变它来解决这个问题的第一件事。
以下是我提到的更改:
/etc/default/nodejs
指向我自己的应用run.sh
修改后的run.sh
所以看起来像这样:
#!/bin/sh
cd `dirname $0`
script -qfc "node server.js" server.log
为了让nodejs使用VirtualBox共享文件夹功能,还进行了一些小的修改,但我认为这是不重要的。
答案 0 :(得分:1)
在您的脚本之前添加exec
。
当你在脚本中说“foo”时,脚本会分离一个孩子并运行它,然后当它退出时,shell继续执行下一个命令。所以你的“init”看到“shell”就像它的孩子一样,而节点就是孙子。
如果你说exec script -qfc "node server.js" server.log
,那么你告诉shell不要分叉孩子,而是直接执行命令并且永远不会返回。这样,您的init脚本将看到节点作为它的子节点,并直接发送节点信号。