2013-05-16 7 views
2

현재 CentOS 6 서버에서 다른 사람이 남긴 엉망을 정리하고 있습니다. 6 시간마다 github 계정에 백업해야하는 응용 프로그램이 있습니다. 데이터 준비를 담당하는 스크립트가 있으며 git add 및 git commit을 처리합니다.cron 작업에서 git push가 작동하지 않습니다.

git push는 "expect"스크립트로 처리됩니다. 이것은 ssh가 요청할 때 passphrase가 git push로 전달 될 수 있도록 수행되었습니다. 사용자는 빈 암호 문구를 사용하고 싶지 않습니다.

루트 사용자가 bash 쉘의 명령 행에서 실행할 때 스크립트가 정상적으로 실행됩니다. github로 전송 된 파일을 볼 수 있습니다.

루트에서 만든 crontab에서 스크립트를 실행하면 스크립트가 실행되는 것처럼 보이지만 git 푸시는 발생하지 않습니다. 수동으로 git push를 실행하면 스크립트가 실패한 후 명령 줄에서 호출 한 설명서와 함께 발생해야하는 푸시가 발생합니다. 스크립트에서 발생한 푸시가 캐시되고 github에 푸시되지 않은 것 같습니다.

누구나 내가 여기에없는 것을 제안 할 수 있습니까? 이런 스크립트 내에서 git push를 작동시킬 수 있습니까?

감사

리처드

+0

명령을 수동으로 수행 할 때 루트로 실행합니까? sudo가 아닌가? – Lynch

+1

cron에서 명령이 실패하는 일반적인 이유는 cron 작업에 의해 실행되지 않기 때문에 .profile에 설정된 환경 변수에 의존한다는 것입니다. – Barmar

+0

명령을 수동으로 실행할 때 루트로 실행합니다. –

답변

1

문제는 제대로 자식 푸시를 실행하려고 할 때 ssh를 ssh를 에이전트로 전달되지되는 암호에 있어야합니다.

follow-up blog post으로 표시된 것처럼 단순히 ssh-agent -s을 cron에 호출 할 수 없으며 단순히 키가없는 다른 인스턴스 만 만들 수 있습니다.

그것을 해결하기 위해, 나는 또 다른 ssh-agent 과정을 시작 유지하고, 대신 하나의 해마에 액세스 할 수있는 방법을 찾을 필요가
. 나는에 로그인 할 때마다 시작 내 crontab을에 변화를 만들어 그 것 기존 ssh-agent 프로세스 ID와 인증 소켓을 검색하여 cron 환경으로 가져옵니다. 이것은 일종의 해킹이지만 실제로 작동합니다 (지난 번과 같지 않음).
은 그냥 SSH 서버에 연결을 시도하기 전에 스크립트에 다음을 추가 (또는 내가 한 일을 오른쪽 세미콜론으로 구분하여 cron 작업으로 넣어) :

export SSH_AGENT_PID=`ps -a | grep ssh-agent | grep -o -e [0-9][0-9][0-9][0-9]` 
export SSH_AUTH_SOCK=`find /tmp/ -path '*keyring-*' -name '*ssh*' -print 2>/dev/null` 

명확히하려면 :

그냥 위의 두 줄을 의미

은 cron 작업으로 선언 된 스크립트의 일부이며 사에 의해 호출 스크립트에 다음을 추가 id cron job. 스크립트가 충분히 작은 경우, 스크립트의 완전히 제거하고 cron 작업 일련의 명령을받을 수 있습니다

은 세미콜론으로 구분, 오른쪽 크론 작업에 넣어 : 참조 " Run two commands with a crontab ".

crontab -l | { cmd1; cmd2 ; cmd3; } | crontab - 

구문은 당신이 add programmatically a command to a cron job 수있는 방법 중 하나에 불과하다있다.

+0

'openvt -c 8/bin/sh -c 'umask 077과 같은 것을 실행하는'rc' 스크립트를 사용하여 이것을 개선 할 수는 없습니까? 시작시/ssh-agent -s> /root/agent.env && source /root/agent.env && ssh-add/path/to/the/key''라고 입력하면 cron 작업 스크립트는'source/root/agent.env' 서버를 연결하기 전에? – kostix

+0

@kostix 좋은 개선 같아. 테스트 해 봤어? – VonC

+0

아니요, 저는 잘 보호 된 * 해독 된 * 키를 사용합니다. 그러나 OP가 암호를 입력하기를 원한다면/전용 부팅 설정은 나에게 좋은 것 같습니다. BTW 내 의견은 귀하의 답변을 향상시키기위한 주장이 아니라 오히려 그것은 OP에 몇 가지 새로운 아이디어를 제공하려고했습니다. – kostix

관련 문제