【问题标题】:git push to remote does not terminategit push 到远程不会终止
【发布时间】:2020-05-05 01:08:48
【问题描述】:

我想将本地更改推送到实时服务器,但“git-push”命令在完成其工作后并没有终止。该程序必须手动停止(我希望它自行关闭)。

我正在尝试使用 git post-receive 挂钩来更新实时服务器并重新启动两个守护程序。问题是“npm start”(最后一个命令)继续将其文本输出发送到“git-push”,即使“npm start”是作为后台作业启动的。我尝试将 stdin 和 sterr 重定向到 /dev/null,但没有产生任何结果。

'npm start' 启动一个反应网络应用程序

#!/bin/sh
killall node
GIT_WORK_TREE=/root/danskesn git checkout -f
server="node /root/danskesn/server/server.js"
webapp="npm start 1>/dev/null 2>&1 &"

nohup $server &
nohup $webapp &

【问题讨论】:

    标签: node.js bash git npm git-post-receive


    【解决方案1】:

    我最好的猜测是您尝试更新的文件被您的活动(反应网络应用程序)进程锁定,因此 git push 没有机会正确解决。

    【讨论】:

      【解决方案2】:

      仔细注意这一行中的重定向:

      webapp="npm start 1>/dev/null 2>&1 &"
      

      现在看看两个后台进程:

      nohup $server &
      nohup $webapp &
      

      其中一个——使用$webapp 的那个——嵌入了标准输出和标准错误的重定向。但是$server 设置为什么?

      server="node /root/danskesn/server/server.js"
      

      练习:这里有重定向吗?如果是这样,找到他们。 (可能有一些,在 node/root/danskesn/server/server.js 内部。不过我不相信有。)

      如果没有任何重定向,则此nohup $server & 命令的标准输出和标准错误输出仍会通过您的网络连接到git push 命令。您的 git push 将等待任何输出,并将其复制到您的 shell 会话中,并以单词 remote: 为前缀。您的git push 只会在没有更多可用输出时终止,即当nohup $server & 关闭其输出和错误流时,可能会完全终止。

      【讨论】:

        猜你喜欢
        • 2017-04-25
        • 1970-01-01
        • 2013-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-29
        • 2018-05-19
        • 2010-11-20
        相关资源
        最近更新 更多