Por que meu cron job não encontra um comando específico?

1

Estou usando a duplicidade para criar backups noturnos do meu servidor por FTP. Eu escrevi um script que faz um backup local e remoto e registra os resultados de saída. Quando eu executo este script como usuário root, ele executa muito bem. No entanto, quando eu o defino como um cron job e o executo, o script é executado, mas a parte do ftp falha. Pouco depois de receber uma mensagem de erro dizendo "ncftpls - comando não encontrado, instale o ncftp 3.1.9 ou posterior", mas ele está instalado! Existe alguma razão pela qual o cron job não conseguirá encontrar um comando que exista na máquina? Tem o seu próprio PATH ou algo assim?

Qualquer ajuda é muito apreciada,

Mike

    
por mclark1129 14.09.2010 / 04:22

2 respostas

5

Você está usando caminhos absolutos? As tarefas do Cron não abrem um shell interativo, portanto, os scripts init bash (bashrc, bash_profile, etc.) que geralmente definem o PATH podem não ser executados - e se forem, eles usarão o root, não o seu. Se não tiver certeza de onde o comando está, você pode usar which <command> para descobrir o caminho absoluto.

Ao lidar com scripts cron, a regra geral é: você quer (a) definir o PATH ou (b) usar caminhos absolutos.

Boa sorte!

    
por 14.09.2010 / 04:48
0

Você deve fornecer o caminho completo para o comando que deseja executar ou definir PATH no trabalho cron.

Exemplo de execução do comando foobar sem fornecer um caminho:

PATH=/sbin:/bin:/usr/sbin:/usr/bin
01 * * * * root foobar

Com um caminho:

01 * * * * root /usr/bin/foobar

Você também pode especificar coisas como o shell para executar as tarefas, definindo SHELL como: SHELL=/bin/bash para o bash. Veja man 5 crontab para mais alguns exemplos.

    
por 14.09.2010 / 08:46