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)
[고쳐 쓰다]
killsshagent
ssh-agent
매달리지 않도록 프로그램에 추가되었습니다 .
[고쳐 쓰다]
Git 저장소에서 적합한 프로그램을 사용해 보았지만 동일한 문제가 발생했습니다. Mr. Bean은 이 CVS 저장소를 즉시 포기하고 새로운 Git 저장소로 전환할 수 없습니다.
[고쳐 쓰다]
여러 개의 신분증을 가지고 있습니다 $HOME/.ssh/
. crontab에서 실행할 때 사용할 ID 파일을 지정할 수 있습니까? 그렇다면 어떻게 해야 할까요?
답변1
추측하자면(저는 유닉스 전문가는 아니지만 cron 작업이 실행되지 않는 것과 비슷한 문제가 있었습니다.) 어떤 사용자로 작업을 실행하고 있습니까? 이 사용자가 필요한 모든 항목에 액세스하는 데 필요한 모든 권한을 갖고 있습니까?
나는 그렇지 않다고 생각합니다 (오류는 그렇게 말합니다! :-D).
업무용 사용자에서 로그아웃하고 다른 사용자로 로그인하면 bash 스크립트가 계속 작동합니까? 그렇지 않다면 이것이 정말 도움이 됩니다.
우리가 사용한 솔루션은 특정 사용자로 작업을 실행하는 것이었습니다.
이를 수행하는 방법에는 여러 가지가 있는 것 같습니다(항상 그런 것은 아님). 어느 것의 장점에 대해서는 논평할 수 없습니다. 그것은 여러분이 결정하는 것입니다. 스크립트를 실행해야 하는 사용자를 crontab에서 어떻게 지정합니까?