“Comando não encontrado” ao executar um script via cron

29

Quero executar meu script no crontab, mas tenho alguns problemas ...

No meu script, eu executo este comando:

db2 connect to myDB2

Isso funciona bem quando executo isso como usuário db2inst1 , mas quando executo esse script no db2inst1 crontab , recebo o seguinte:

db2: comando não encontrado.

Como posso resolver isso?

Wolfy
fonte

Respostas:

43

Para evitar ter que digitar o caminho absoluto para um comando, os shells introduziram a $PATHvariável de ambiente, cada diretório é separado por a :e as pesquisas são feitas da esquerda para a direita. crongeralmente limpa todo o ambiente, incluindo essa $PATHvariável. Portanto, o script pode se comportar de maneira diferente no seu cron em comparação com o comportamento no shell.

Use caminhos absolutos

Execute which db2como db2inst1usuário para obter o caminho completo do db2programa. Se a saída for /usr/bin/db2, seu comando cron seria semelhante a:

/usr/bin/db2 connect to myDB2

Defina a variável PATH

Execute echo "$PATH"como db2inst1usuário para obter a $PATHvariável e verifique se ela também está disponível no seu script cron. Por exemplo, se a saída fosse /usr/local/bin:/usr/bin:/bin, você colocaria a próxima linha na parte superior do seu script de shell:

export PATH="/usr/local/bin:/usr/bin:/bin"
Lekensteyn
fonte
8

Conforme respondido em https://askubuntu.com/a/23438/227839 , você deve definir PATHno seu shell script:

#!/bin/bash
PATH="/usr/local/bin:/usr/bin:/bin"

# rest of script follows

ou no arquivo crontab, que será aplicado a todos os trabalhos cron:

PATH="/usr/local/bin:/usr/bin:/bin"
0 1 * * * db2 connect to myDB2
Barragem Linh
fonte
Obrigado, foi útil!
Yamashiro Rion
3

Você deve definir o que são db2 e myDB2 , caso contrário, use o local absoluto de ' arquivo ' ou ' aplicativo ' que deseja executar.

Exemplo:

/bin/rm /home/ubuntu/a.txt
Mahmudin Ashar
fonte