2014-01-29 31 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