Por que o git não está usando meu pubkey com crontab?

3

Para fazer backup do meu banco de dados sql, tenho uma tarefa cron executando que faz um dump do mysql. Agora eu quero criar outro cron job que envie este dump para o repositório, o problema agora é que ele não funciona.

No log do cron, vejo a linha em que o comando é executado, mas nada é confirmado.

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
MAILTO=root
HOME=/

49 16 * * * cd /path/to/backup/folder/ && /usr/local/bin/git commit -am "Updating DB backup"

Isso é o que eu coloco em crontab -e. Eu também tentei isso em / etc / crontab, onde eu coloquei root como usuário e isso funciona, mas apenas como usuário root, o que é um problema por causa do hook git post-commit que empurra depois que algo é enviado. Desde que apenas o meu usuário tem permissão para empurrar isso não funciona quando a raiz faz o commit.

Desde que está trabalhando com o usuário root, estou pensando que é um problema de permissões, mas permissões de quê? Esses comandos funcionam na linha de comando normal.

Ao capturar a stdout e stderr, recebo o seguinte no log.

Permission denied (publickey).^M
fatal: The remote end hung up unexpectedly

para que ele não seja executado como meu usuário ou não encontre a chave?

    
por dazz 06.03.2012 / 17:00

2 respostas

3

O formato do seu arquivo cron (que é o que você obtém quando digita crontab -e) é diferente do arquivo cron do sistema. Você não precisa especificar o usuário no arquivo cron do usuário, ele é executado automaticamente como você. Experimente:

49 16 * * * cd /path/to/backup/folder/ && /usr/local/bin/git commit -am "Updating DB backup"

Eu também sugiro pegar stdout e stderr para que você possa ver o que o commit fez, por exemplo:

49 16 * * * cd /path/to/backup/folder/ && /usr/local/bin/git commit -am "Updating DB backup" >> /path/to/logfile 2>&1

Editado para adicionar: Agora que você mostrou a saída de stdout / stderr, o problema é claro. O ssh não está encontrando suas chaves, o que provavelmente se deve a sua configuração

HOME=/

Deve ser algo como

HOME=/home/me

Alternativamente, você provavelmente poderia deixar isso sem definição.

    
por pestilence 06.03.2012 / 17:15
1

Você provavelmente está configurando o crontab usando outro usuário que não você. Verifique se você está fazendo "sudo crontab -e" e tente apenas "crontab -e" com seu usuário ou quem é o dono do git e dos arquivos.

Isso me classificou, então talvez funcione para você também.

    
por Rodrigo Dias 07.09.2013 / 11:21

Tags