Como atualizar o repositório de controle de versão no crontab?

1

Estou tentando automatizar a atualização do repositório de controle de versão no crontab. O seguinte script /home/usr/mrbean/bin/update.sh funciona na linha de comando interativa do Bash:

#!/bin/bash

ROOTPATH="/home/user/mrbean/temp/"
cd $ROOTPATH
SSHTMPFILE="${ROOTPATH}ssh-agent.cf"
ssh-agent -s | head -n 2 > "$SSHTMPFILE"

function killsshagent {
    /bin/kill $SSH_AGENT_PID
}
trap killsshagent EXIT


if [ -f "$SSHTMPFILE" ]; then
    source "$SSHTMPFILE"
    ssh-add
    rm "$SSHTMPFILE"
fi

killsshagent

if [ 'hostname' == "mrbeancomp.local" ]; then
    REPODIR="/home/usr/mrbean/repo/"
    cd $REPODIR
    cvs update -dP  > "$HOME/log/log.txt"
fi

Eu então adiciono

@hourly /home/usr/mrbean/bin/update.sh

O script funciona por itseful quando invocado no shell Bash interativo, mas não via crontab. Dá erros e é enviado para o correio do sistema /var/mail/mrbean :

Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
cvs [update aborted]: end of file from server (consult above messages if any)

[Atualizar]

killsshagent adicionado no programa, por isso ssh-agent não está pendente.

[Atualizar]

Tentei um programa adaptado em um repositório Git e experimentei o mesmo problema. O Sr. Bean não pode abandonar imediatamente este repositório CVS e mudar para um novo Git.

[Atualizar]

Eu tenho vários arquivos de identidade em $HOME/.ssh/ . É possível que, ao executar a partir do crontab, eu precise especificar qual arquivo de identidade usar? Se sim, como?

    
por qazwsx 09.10.2014 / 22:03

1 resposta

0

Com um palpite (não sou especialista em unix, mas tive um problema parecido com trabalhos cron não executados), em que usuário você está executando a tarefa? Esse usuário tem todas as permissões necessárias para acessar tudo o que você precisa?

Eu suspeito que não (o tipo de erro diz isso! :-D).

Se você sair do usuário que está trabalhando e fizer login como um usuário diferente, o script bash ainda funcionará? Se não, então isso ajuda.

A solução que usamos foi para executar a tarefa como um usuário específico.

Existem várias maneiras de fazer isso, parece (não existem sempre). Não posso comentar sobre os méritos de um sobre o outro - isso será para você decidir. Como especificar em crontab por qual usuário executar roteiro?

    
por 18.05.2015 / 11:54

Tags