Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么不是';t node.js是否能够从upstart脚本捕获SIGTERM?_Linux_Ubuntu_Upstart - Fatal编程技术网

Linux 为什么不是';t node.js是否能够从upstart脚本捕获SIGTERM?

Linux 为什么不是';t node.js是否能够从upstart脚本捕获SIGTERM?,linux,ubuntu,upstart,Linux,Ubuntu,Upstart,当我停止一个暴发户作业时,默认情况下它使用SIGTERM。我在node.js中找到了如下术语: 我通过从终端运行它并发送kill-s SIGTERM[pid]验证了这一点。这会触发正常关机,我在日志中看到了它 我有一个像这样的暴发户脚本: #进程将在网络可用后启动。 从运行级别开始[2345] 在运行级别停止[016] #保持服务器运行 重生 重生限额5 30 #等待5分钟,让服务器正常关闭 终止超时300 #允许正常关机 杀伤信号信号项 正常退出0 SIGTERM SIGINT SIGQU

当我停止一个暴发户作业时,默认情况下它使用SIGTERM。我在node.js中找到了如下术语:

我通过从终端运行它并发送
kill-s SIGTERM[pid]
验证了这一点。这会触发正常关机,我在日志中看到了它

我有一个像这样的暴发户脚本:

#进程将在网络可用后启动。
从运行级别开始[2345]
在运行级别停止[016]
#保持服务器运行
重生
重生限额5 30
#等待5分钟,让服务器正常关闭
终止超时300
#允许正常关机
杀伤信号信号项
正常退出0 SIGTERM SIGINT SIGQUIT
chdir/var/web\u服务器
剧本
#环境变量
. /etc/环境
导出节点环境
#将所有stdout和stderr设置为转到命名管道
mkfifo/tmp/log fifo
(记录器-t网络/tmp/log fifo
rm/tmp/log fifo
node server.js--env=“$node\u env”2>&1
结束脚本
当我开始工作时,一切都很好。当我停止作业时,节点进程立即终止,节点从不处理SIGTERM信号

如果我将upstart conf更改为
kill signal SIGINT
,则节点进程将获得SIGINT并正常关闭。WTF

为什么SIGINT工作正常,而SIGTERM工作不正常?为什么我的节点进程在从终端运行时完全能够捕获SIGTERM,但在通过Upstart运行时却不能,而且它能够捕获SIGINT?这是Upstart中的怪癖还是bug

process.on('SIGTERM', shutdownServerGracefully);
process.on('SIGINT', shutdownServerGracefully);
# Process will start after a network is available.
start on runlevel [2345]
stop on runlevel [016]

# Keep server running
respawn
respawn limit 5 30

# Wait 5 minutes for server to gracefully shutdown
kill timeout 300
# Allow for graceful shutdown
kill signal SIGTERM
normal exit 0 SIGTERM SIGINT SIGQUIT
chdir /var/web_server

script
  # Environment variables
  . /etc/environment
  export NODE_ENV

  # Setup all stdout and stderr to go to a named pipe
  mkfifo /tmp/log-fifo
  ( logger -t web < /tmp/log-fifo & )
  exec > /tmp/log-fifo
  rm /tmp/log-fifo

  node server.js --env="$NODE_ENV" 2>&1
end script