
Eu tenho um script que funciona bem se eu invocá-lo na linha de comando, usando Bash. Mas quando o cron tenta executá-lo, ele falha com um erro “mysql: comando não encontrado”.
Acho que isso ocorre porque o cron não está usando o bash como shell, mas não consigo descobrir como fazer o cron usar o bash.
Tentei adicionar isso ao topo do script:
#!/bin/bash
Mas sem alegria. Como faço para forçar o cron a usar o bash como shell? Sou meio novo no bash e no cron, então posso estar faltando algo simples. Eu li vários posts de serverfault (faria um link para todos eles, mas não consigo, novo usuário) e tentei entender e aplicar as informações da melhor maneira que pude, além de pesquisar muito no Google, mas não consegui.
Responder1
Pulegium está certo, o problema não é o tipo de shell, é o PATH. Quando o cron é executado, ele tem um caminho de pesquisa muito limitado; em vez de inserir mysql
seu comando, você deve colocar /path/to/mysql
o caminho real para o executável. Geralmente algo como /usr/local/bin/mysql
. Você terá que procurá-lo para encontrar o caminho exato. Além disso, se fosse um problema de shell, em seu arquivo cron você poderia executar bash e, em seguida, executar seu script: /bin/bash /path/to/script.sh
, isso garantiria que bash fosse o responsável pelo processamento do arquivo.
Responder2
é melhor usar caminhos absolutos para comandos em scripts cron. para que você não dependa de nenhuma configuração PATH que possa ter personalizado.