Scp 在 cron 中不起作用

J-u*_*ior 8 ssh scp cron backup

是的,我知道这是经典。我已经用谷歌搜索了它,但它仍然不起作用。我有以下脚本:

 #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 :-]"
Run Code Online (Sandbox Code Playgroud)

在 shell 中一切正常,但是当它作为 cron 作业执行时,它根本不会 scp (但会创建备份)。是的,我有一个空的释义。不明白为什么它不起作用。

Ulr*_*gel 9

问题是您可能ssh-agent在交互式环境中运行但不在 cron 中运行,并且您的 ssh 密钥文件名与默认文件名不同。

要解决此问题,您可以在 scp 命令行中明确指定 ssh 密钥,即,scp -i $SSH_KEY_FILENAME~/.ssh/config为您的主机指定适当的条目,即:

Host backuphost
    IdentityFile SSH_KEY_FILENAME
Run Code Online (Sandbox Code Playgroud)

要测试您的脚本,您可以尝试运行它,通过env -i /path/to/your/script它应该重置您的环境并模拟 cron 环境。