我正在尝试使用git存储库执行某些操作的ssh触发器。当我在后台运行代码时,它可以工作。添加nohup
没有效果。相关的一点只是说:
git checkout master
Already on 'master'
但是,当我最终背景时,它停止使用:
git checkout master
fatal: unable to write new index file
(输出定向到日志文件;也在前台完成;日志文件包含正在执行的命令)。
我在脚本的开头打印了id
和umask
,它们看起来一样。在两种情况下,它都是由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 :(得分:0)
我能想到的唯一区别是,随着ssh已经失效,没有tty,而git正试图以某种原因访问它。所以我使用script
(1)来解决这个问题。结果调用有些疯狂,但它有效:
nohup script -qec "/path/to/git/script.sh args" /dev/null \
</dev/null >/dev/null 2>&1 &
我怀疑尝试获取控制终端(它之前没有连接到任何流)与输出分页有关,但我不明白为什么git checkout
需要它。也不是为什么它不应该失败。