2014-01-29 33 views
0

我想要獲得一個ssh觸發器,它將使用git存儲庫進行某些操作。當我在後臺運行代碼時,它可以工作。添加nohup不起作用。相關位只是說:git checkout在背景下不工作

git checkout master 
Already on 'master' 

但是,當我終於背景,它停止與合作:

git checkout master 
fatal: unable to write new index file 

(輸出被定向到一個日誌文件,也就是說在前臺做的好;日誌文件包含正在執行的命令)。

我在腳本的開頭打印了idumask,它們看起來一樣。在這兩種情況下,它都通過ssh觸發器執行,唯一的區別是命令後的&

腳本是這樣的:

#!/bin/sh 
export GIT_DIR=/somewhere 
nohup git-using-script.sh </dev/null >/dev/null 2>&1 & 
sleep 1 

沒有睡1,nohup的不啓動(在重定向發生的nohup的開始之前,SSH管理的nohup之前退出創建一個新的會話和命令無論如何都終止)。但沒有&一切正常,與腳本運行,但git產生的錯誤。

+0

你是如何背景的過程?當前工作目錄或用戶是否可能更改? – bundacia

+0

@bundacia:我用'&'和'nohup'結合後臺。而睡眠,因爲沒有它,ssh會在nohup更改會話之前斷開連接,並將流程退出。 –

回答

0

我能想到的唯一區別是,ssh已經沒有了,因此git正在嘗試訪問它。所以我通過使用script(1)來解決這個問題。產生的調用是有點瘋狂,但它的工作原理:

nohup script -qec "/path/to/git/script.sh args" /dev/null \ 
    </dev/null >/dev/null 2>&1 & 

我懷疑企圖得到控制終端(它沒有連接到連之前的任何流)有事情做與輸出分頁,雖然我不t看看爲什麼git checkout會需要。也不是爲什麼它會失敗的操作。

+0

如果您明確告訴SSH客戶端未分配PTY('-T'命令行選項),該怎麼辦? – kostix