我有一个 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-receive
hook。