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

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

Estou tentando automatizar a atualização do repositório de controle de versão no crontab. O script a seguir /home/usr/mrbean/bin/update.shfunciona 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 sozinho 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]

killsshagentadicionado no programa para ssh-agentnão ficar pendurado.

[Atualizar]

Tentei um programa adaptado em um repositório Git e tive o mesmo problema. Bean não tem permissão para abandonar imediatamente este repositório CVS e mudar para um novo repositório Git.

[Atualizar]

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

Responder1

Suponho que (não sou um especialista em Unix, mas tive um problema semelhante com tarefas cron que não estavam em execução), com qual usuário você está executando a tarefa? Esse usuário tem todas as permissões necessárias para acessar tudo que você precisa?

Suspeito que não (o erro diz isso! :-D).

Se você sair do usuário ativo e fizer login como um usuário diferente, o script bash ainda funciona? Se não, isso ajuda.

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

Parece que existem várias maneiras de fazer isso (nem sempre). Não posso comentar os méritos de um em detrimento do outro - isso cabe a você decidir. Como especificar no crontab por qual usuário executar o script?

informação relacionada