はい、それが古典であることを知っています。私はすべてを検索しましたが、まだ動作しません。次のスクリプトがあります。
#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環境が模倣されます。