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