O script no cron não pode encontrar o comando

3

Eu tenho um script que despeja o banco de dados e carrega o arquivo SQL para o Swift. Eu corri para o problema em que o script é executado bem no terminal, mas falha no cron.

Um pouco de depuração e descobri que o comando /usr/local/bin/swift não foi encontrado no script.

Aqui está minha entrada no crontab:

*/2 * * * * . /etc/profile; bash /var/lib/postgresql/scripts/backup  

Veja o que tentei:

  1. Usando o caminho completo para swift as /usr/local/bin/swift
  2. Executando o script /etc/profile antes de executar o script bash.

Como posso resolver isso?

    
por Little Child 08.08.2017 / 13:50

2 respostas

5

O Cron não funciona com o mesmo ambiente que um usuário. Se você fizer o seguinte, verá o que quero dizer:

digite env no terminal e anote a saída.

Em seguida, defina uma tarefa cron como esta e compare a saída com a anterior:

*/5 * * * * env > ~/output.txt 

Você perceberá que o problema provavelmente é porque crontab não tem a mesma variável PATH do seu usuário. Como uma solução para isso, você pode (do seu usuário postgres) echo $PATH e então copiar os resultados para a primeira linha do seu crontab (algo assim)

PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/jbutryn/.local/bin:/home/jbutryn/bin

Ou, se você quiser ser mais específico, basta adicionar o seguinte:

PATH=$PATH:/usr/local/bin

No entanto, normalmente eu sempre coloco o PATH do meu usuário no crontab porque ainda não ouvi uma boa razão para não fazê-lo e você provavelmente vai se deparar com esse problema novamente se não o fizer.

    
por 08.08.2017 / 14:54
0

Você fez um dos mais comuns erros do cron . Se você estiver usando um ambiente específico, inclua o caminho para $ PATH:

# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/usr/sbin:/usr/bin:/script
export PATH

Verifique também seu log cron (/ var / log / cron ou / var / log / syslog). E verifique a permissão do usuário para arquivos binários.

    
por 22.08.2017 / 14:30