Scp não funciona no cron

5

Sim, eu sei que é clássico. Eu pesquisei tudo por aí, mas ainda assim não funciona. Eu tenho o seguinte script:

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

tudo funciona bem no shell, mas quando é executado como cron job simplesmente não faz scp (mas cria um backup). Sim, tenho uma paráfrase vazia. Não consigo entender por que isso não funciona.

    
por J-unior 24.12.2012 / 10:33

2 respostas

6

O problema é que você provavelmente está executando ssh-agent em seu ambiente interativo, mas não no cron e que o nome do arquivo da chave ssh é diferente dos nomes de arquivos padrão.

Para resolver isso, você pode especificar explicitamente a chave ssh na linha de comando do scp, ou seja, scp -i $SSH_KEY_FILENAME ou especificar uma entrada ~/.ssh/config apropriada para o seu host, por exemplo:

Host backuphost
    IdentityFile SSH_KEY_FILENAME

Para testar seu script, você pode tentar executá-lo via env -i /path/to/your/script , o que deve redefinir seu ambiente e imitar o ambiente cron.

    
por 24.12.2012 / 11:00
0

Assumindo o Linux.

1.O shell padrão em que uma tarefa cron é executada é muito limitado ( sh ), inicie seu script com:

#!/bin/bash

2. STDOUT e STDERR em tarefas agendadas são redirecionadas para o correio do sistema. Verifique sua caixa de correio.

3. Verifique seu script usando o método nesta resposta: link

4. Verifique sua variável PATH enquanto estiver no ambiente cron e a localização de todos os binários que você chamar. Onde está localizado svnadmin ? Use o nome do caminho completo.

    
por 25.12.2012 / 12:05