我们有一个节点项目,使用nohup和 supervise 来监督节点服务器。我们使用的命令是:
nohup supervise /usr/share/$PACKAGE/superviseRun/supervise$NODE_PORT >> /var/log/<company_name>/sp-sms/$PACKAGE/supervise$NODE_PORT-$(date +"%d-%m-%y").log 2>> /var/log/<company_name>/sp-sms/$PACKAGE/supervise$NODE_PORT-$(date +"%d-%m-%y").log &
该命令已在生产环境中使用了 3 年。现在最近有人把上面的命令改成:
nohup supervise /usr/share/$PACKAGE/superviseRun/supervise$NODE_PORT >> /var/log/<company_name>/sp-sms/$PACKAGE/supervise$NODE_PORT-$(date +"%d-%m-%y").log 1>> /var/log/<company_name>/sp-sms/$PACKAGE/supervise$NODE_PORT-$(date +"%d-%m-%y").log &
基本上2>>被错误地更改为1>>。发布此更改后,我们开始注意到我们的 API 运行缓慢。一些理想情况下会在 2 秒内完成的 api 需要 2-4 分钟才能完成。我们使用二进制搜索来缩小错误提交的范围并将其还原。恢复此更改后,事情开始正常运行。虽然这个有问题的提交在生产中,但我们看到了很多 EPIPE 错误:
Error: write EPIPE
at exports._errnoException (util.js:856:11)
at WriteWrap.afterWrite (net.js:767:14)
恢复此更改后,没有 EPIPE 错误。我确信这个 EPIPE 错误以某种方式与上述错误提交有关。有人可以帮助我了解这里发生了什么。
PS:我知道2
&分别是和1
的文件描述符。stderr
stdout