Crontab não executando um shell script

1

Usando a conta alex , criei:

~/pocketmine/pocketmine.sh

Quando eu executo manualmente usando a mesma conta, alex :

cd pocketmine
./pocketmine.sh start

Funciona bem.

Eu adicionei isso a /etc/crontab :

16 15    * * *   alex /home/alex/pocketmine/pocketmine.sh start

e não funciona às 15:16.

Alguém pode me dizer o que eu fiz de errado?

    
por alexhore 01.02.2016 / 16:39

2 respostas

4

Em geral, em vez de editar /etc/crontab diretamente, é mais fácil usar o comando crontab . A sintaxe para alterar o crontab de um usuário não-root varia ligeiramente de plataforma para plataforma. Por exemplo, no Red Hat Enterprise Linux, seria:

# crontab -e -u alex

No AIX, HP-UX e Solaris:

# crontab -e alex

Você também pode precisar adicionar esse usuário a cron.allow para que o trabalho seja executado.

Boas informações sobre por que uma tarefa pode não ter sido executada podem ser encontradas no log do cron, cuja localização também varia.

Editar: para responder à sua pergunta diretamente, sua edição direta provavelmente não funcionou, já que você não reiniciou o daemon do cron. crontab faz isso por você, mais um dos seus muitos serviços valiosos.

    
por 01.02.2016 / 17:17
1

Se você tiver um script executado corretamente quando executado a partir da linha de comando em um shell, mas não executado em cron , talvez haja um problema com o ambiente em que o cron está sendo executado. Tente anexar:

2> /tmp/error.txt 

Para o final da sua declaração, que não será executada em cron para ver quais erros estão ocorrendo durante a execução. Execute o comando com cron e leia o conteúdo do arquivo /tmp/error.txt .

Quando tive um problema ao executar rsync de um arquivo cron , recebi a seguinte saída no meu arquivo error.txt :

ld.so.1: rsync: fatal: libiconv.so.2: open failed: No such file or directory.

O problema era que o ambiente não estava configurado para encontrar as bibliotecas necessárias para executar o comando. Eu adicionei uma instrução de variável de ambiente LD_LIBRARY_PATH ao início do meu script para definir a variável LD_LIBRARY_PATH para o mesmo valor do que eu tinha no meu arquivo .profile desde que o script foi executado corretamente quando eu o executei a partir de um shell usando meu perfil.

"export LD_LIBRARY_PATH="/usr/lib:/usr/local/lib"

Depois disso, funcionou bem. Meu programa rsync fica sem /usr/local/lib , então estou supondo que a referência a essa área é a que resolveu meu problema. Você também pode ter outros problemas de caminho se não usar o caminho completo ao se referir a outros arquivos em seu script.

    
por 08.02.2016 / 20:37

Tags