2014-01-29 4 views
0

git 저장소로 뭔가를 할 수있는 ssh 트리거를 얻으려고합니다. 백그라운드에서 코드를 실행하면 작동합니다. nohup을 추가해도 영향을주지 않습니다. 나는 마침내 배경은,이 작업을 중지 할 때배경으로 사용할 때 git checkout이 작동하지 않습니다.

git checkout master 
Already on 'master' 

을 :하지만 관련 비트는 말한다 즉이뿐만 아니라 포 그라운드에서 수행되며,

git checkout master 
fatal: unable to write new index file 

(출력은 로그 파일로 이동됩니다 로그 파일에는 실행중인 명령이 포함됩니다).

나는 스크립트의 시작 부분에 idumask을 인쇄했으며 동일하게 보입니다. 그리고 두 경우 모두 ssh 트리거에 의해 실행됩니다. 유일한 차이는 명령 뒤에 &입니다. 슬립이없는 경우 1 ~

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

에서, 리디렉션은 nohup을 시작하기 전에, SSH는 nohup을하기 전에 종료 관리하는 일이 (가 시작되지 않는 nohup을 새로운 세션 명령을 생성합니다

스크립트는 다음과 같습니다 어쨌든 종료됩니다.) 그러나 &이 없으면 스크립트가 실행되지만 git은 오류를 생성합니다.

+0

어떻게 프로세스를 재개합니까? 현재 작업 디렉토리 또는 사용자가 변경 될 수 있습니까? – bundacia

+0

@bundacia : 나는'nohup'과 결합 된'&'로 되돌아갑니다. 그리고 잠을 자면, nohup이 세션을 변경하기 전에 ssh가 연결을 끊고 어쨌든 프로세스를 종료하기 때문입니다. –

답변

0

내가 생각할 수있는 유일한 차이점은 이미 아래에있는 ssh는 tty가없고 어떤 이유로 든 액세스하려고 시도한다는 것입니다. 그래서 나는 그것을 script (1)을 사용하여 해결했다. 그 결과 호출은 다소 미친이지만, 그것은 작동합니다

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

내가 제어 터미널을 (그것이 심지어 전에 스트림에 연결되지 않은) 나는 '돈 불구하고, 출력 페이징 함께 할 수있는 뭔가가 얻을 수있는 시도를 의심 왜 git checkout이 필요할지 모르겠다. 왜 그것이 작동을 실패해야하는지.

+0

SSH 클라이언트에게 PTY를 할당하지 말라고 명시 적으로한다면 ('-T' 명령 행 옵션)? – kostix

관련 문제