scpがcronで動作しない

scpがcronで動作しない

はい、それが古典であることを知っています。私はすべてを検索しましたが、まだ動作しません。次のスクリプトがあります。

 #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環境が模倣されます。

おすすめ記事