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 :-]"

一切在 shell 中工作正常,但是当它作为 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

假设是Linux。

1. 执行 cron 作业的默认 shell 非常有限 ( sh),使用以下命令启动脚本:

#!/bin/bash

2.在 cron 作业STDOUTSTDERR重定向系统邮件。检查你的邮箱。

3.使用此答案中的方法检查您的脚本:https://unix.stackexchange.com/a/56503/16841

4.在 cron 环境中检查 PATH 变量以及您调用的所有二进制文件的位置。位于哪里svnadmin?使用完整路径名。

相关内容