私は受信後に単体テストを実行しますが、ユーザがそれを待たせたくはありません。非同期gitフック?
私はgitの-userメーリングリストからの提案を試してみました(「ただ&
それ」)が、これは動作していない:https://groups.google.com/forum/#!topic/git-users/CFshrDgYYzE
gitのは、私はちょうどこの中に入れても、終了するにはbashスクリプトを待つように見えますフック/ポスト受信:
exec-unit-tests.sh &
私は受信後に単体テストを実行しますが、ユーザがそれを待たせたくはありません。非同期gitフック?
私はgitの-userメーリングリストからの提案を試してみました(「ただ&
それ」)が、これは動作していない:https://groups.google.com/forum/#!topic/git-users/CFshrDgYYzE
gitのは、私はちょうどこの中に入れても、終了するにはbashスクリプトを待つように見えますフック/ポスト受信:
exec-unit-tests.sh &
これは私のために働いた。 &
とstdout & stderrのパイプが閉じている必要があります。
long-running-command >&- 2>&- &
バックグラウンドでコマンドを入れるためには、両方のstdout
とstderr
を閉じる必要があります。いずれかが開いたままになっていると、プロセスはバックグラウンドにならず、フックスクリプトが終了するまでコミット操作は完了しません。
怠惰な別のアプローチは、単に/dev/null
にstdout
とstderr
をリダイレクトすることです:
long-running-command >/dev/null 2>&1 &
これは少し少ないきれいですが、おそらく簡単に理解し、覚えておくと、それは同じ効果があります。
が見つかりました:http://git.661346.n2.nabble.com/Background-processes-in-post-receive-hook-td6235357.html – oberhamsi
実際には、 'stdout'と' stderr'の両方を閉じる必要がありますすでにそれをしています)。いずれかを開いたままにすると、プロセスはバックグラウンドにはなりません。個人的には '>/dev/null 2>/dev/null&'を使って同じ効果を得ています。なぜなら、 'man bash'を参照せずに何が行われているのか分かりやすいからです。 – janos
私はあなたの/ dev/nullソリューションがより好きです!それを答えてください – oberhamsi
あなたはその記事で提案されている他の方法を試してみましたか? cronを使用して非同期ジョブをスケジュールしますか?需要に応じて仕事をスケジュールするための「at」のようなものも、 –
を調べてみる価値があるかもしれないが、それは試していない。 – oberhamsi