네, 그게 고전이라는 걸 알아요. 나는 모든 것을 검색했지만 여전히 작동하지 않습니다. 다음 스크립트가 있습니다.
#First go to SVN repo folder
cd $svnrepos
# Just make sure we have write access to backup-folder
if [ -d "$bakdest" ] && [ -w "$bakdest" ] ; then
# Now $repo has folder names = project names
for repo in *; do
# do svn dump for each project
echo "Taking backup/svndump for: $repo"
echo "Executing : svnadmin dump $repo > $bakdest/$repo-$bakdate.svn.dump \n"
# Now finally execute the backup
svnadmin dump $repo > $bakdest/$repo-$bakdate.svn.dump
# You can go an extra mile by applying tar-gz compression to svn-dumps
# We also would like to save the dump to remote place/usb
# USB/other directory exists, copy the dump there
echo "Going to copy $repo dump to $baktousb directory...\n"
/usr/bin/scp -v $bakdest/$repo-$bakdate.svn.dump $baktousb/$repo-$bakdate.svn.dump
done
else
echo "Unable to continue SVN backup process."
echo "$bakdest is *NOT* a directory or you do not have write permission."
fi
# End of backup script
echo "\n\n================================="
echo " - Backup Complete, THANK YOU :-]"
셸에서는 모든 것이 잘 작동하지만 cron 작업으로 실행하면 scp가 전혀 수행되지 않습니다(그러나 백업은 생성됩니다). 예, 공허한 설명이 있습니다. 왜 작동하지 않는지 이해하지 못합니다.
답변1
문제는 ssh-agent
대화형 환경에서 실행 중일 수 있지만 cron에서는 실행되지 않을 수 있으며 SSH 키 파일 이름이 기본 파일 이름과 다르다는 것입니다.
이 문제를 해결하려면 scp 명령줄에 SSH 키를 명시적으로 지정 scp -i $SSH_KEY_FILENAME
하거나 ~/.ssh/config
호스트에 적합한 항목을 지정하면 됩니다.
Host backuphost
IdentityFile SSH_KEY_FILENAME
스크립트를 테스트하려면 스크립트를 통해 실행해 보세요 env -i /path/to/your/script
. 그러면 환경이 재설정되고 cron 환경이 모방됩니다.
답변2
리눅스를 가정합니다.
1. cron 작업을 실행하기 위한 기본 셸은 매우 제한적입니다( sh
). 다음 명령을 사용하여 스크립트를 시작합니다.
#!/bin/bash
2. cron 작업 STDOUT
에서 STDERR
시스템 메일을 리디렉션합니다 . 이메일을 확인.
3. 이 답변의 방법을 사용하여 스크립트를 확인하십시오.https://unix.stackexchange.com/a/56503/16841
4. cron 환경에서 PATH 변수와 호출한 모든 바이너리의 위치를 확인합니다. 어디에 위치해 있나요 svnadmin
? 전체 경로 이름을 사용하십시오.