我正在尝试获得一个可以使用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会产生错误。
我能想到的唯一区别是,由于SSH已经下降了,因此Git试图出于某种原因或其他原因尝试访问它。因此,我使用script
(1)来解决它。最终的调用有些疯狂,但有效:
nohup script -qec "/path/to/git/script.sh args" /dev/null
</dev/null >/dev/null 2>&1 &
我怀疑要获得控制终端的尝试(即使以前也没有连接到任何流)与输出分页有关,尽管我不明白为什么git checkout
需要它。