crontab에서 버전 관리 저장소를 업데이트하는 방법은 무엇입니까?

crontab에서 버전 관리 저장소를 업데이트하는 방법은 무엇입니까?

crontab에서 버전 제어 저장소를 자동으로 업데이트하려고 합니다. 다음 스크립트 /home/usr/mrbean/bin/update.sh는 대화형 Bash 명령줄용입니다.

#!/bin/bash

ROOTPATH="/home/user/mrbean/temp/"
cd $ROOTPATH
SSHTMPFILE="${ROOTPATH}ssh-agent.cf"
ssh-agent -s | head -n 2 > "$SSHTMPFILE"

function killsshagent {
    /bin/kill $SSH_AGENT_PID
}
trap killsshagent EXIT


if [ -f "$SSHTMPFILE" ]; then
    source "$SSHTMPFILE"
    ssh-add
    rm "$SSHTMPFILE"
fi

killsshagent

if [ `hostname` == "mrbeancomp.local" ]; then
    REPODIR="/home/usr/mrbean/repo/"
    cd $REPODIR
    cvs update -dP  > "$HOME/log/log.txt"
fi

그런 다음 추가합니다.

@hourly /home/usr/mrbean/bin/update.sh

스크립트는 대화형 Bash 셸에서 호출할 때 순서대로 실행되지만 crontab을 통해 호출할 수는 없습니다. 오류가 발생하고 시스템 메일로 보냅니다 /var/mail/mrbean.

Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
cvs [update aborted]: end of file from server (consult above messages if any)

[고쳐 쓰다]

killsshagentssh-agent매달리지 않도록 프로그램에 추가되었습니다 .

[고쳐 쓰다]

Git 저장소에서 적합한 프로그램을 사용해 보았지만 동일한 문제가 발생했습니다. Mr. Bean은 이 CVS 저장소를 즉시 포기하고 새로운 Git 저장소로 전환할 수 없습니다.

[고쳐 쓰다]

여러 개의 신분증을 가지고 있습니다 $HOME/.ssh/. crontab에서 실행할 때 사용할 ID 파일을 지정할 수 있습니까? 그렇다면 어떻게 해야 할까요?

답변1

추측하자면(저는 유닉스 전문가는 아니지만 cron 작업이 실행되지 않는 것과 비슷한 문제가 있었습니다.) 어떤 사용자로 작업을 실행하고 있습니까? 이 사용자가 필요한 모든 항목에 액세스하는 데 필요한 모든 권한을 갖고 있습니까?

나는 그렇지 않다고 생각합니다 (오류는 그렇게 말합니다! :-D).

업무용 사용자에서 로그아웃하고 다른 사용자로 로그인하면 bash 스크립트가 계속 작동합니까? 그렇지 않다면 이것이 정말 도움이 됩니다.

우리가 사용한 솔루션은 특정 사용자로 작업을 실행하는 것이었습니다.

이를 수행하는 방법에는 여러 가지가 있는 것 같습니다(항상 그런 것은 아님). 어느 것의 장점에 대해서는 논평할 수 없습니다. 그것은 여러분이 결정하는 것입니다. 스크립트를 실행해야 하는 사용자를 crontab에서 어떻게 지정합니까?

관련 정보