Git post-receive 钩子挂起

Git post-receive 钩子挂起

我有一个 git post-receive 钩子,它可以构建并运行 Go 程序。问题是,我获取了 Go 程序的所有输出,但git push执行“永远无法完成”,卡在那里。

我正在寻找一种不挂起推送命令来运行 Go 程序的方法。

我的接收后文件:

#!/bin/bash

while read oldrev newrev ref
do
    branch=`echo $ref | cut -d/ -f3`
    if [ "production" == "$branch" -o "master" == "$branch" ]; then
    ...

        go build

        exec ./webservice

        echo 'Pushed!'
    fi
done

答案1

我建议将 go (和 exec ?)放在背景中 (go build ; exec ./webservice )&

如果你的 go 程序出了问题,git 不会通知你,所以你需要一个日志

也许更好的解决方案是,如果 go 程序运行时间过长则自动终止它timeout

答案2

解决:

nohup ./webservice > output.txt 2>&1 &

这样,我就可以将stdout和记录stderr到文件中并避免挂起 git post-receivehook。

相关内容