Por que o cron job não consegue encontrar comandos básicos do Linux? [fechadas]

4

Estou tentando configurar um cron job para executar um script PHP diariamente como parte de um sistema de reservas baseado na web. Ele está funcionando perfeitamente há vários anos em um servidor Apache diferente usando isso no crontab:

0 3 * * * wget -q -O /dev/null http://www.my_other_domain.org.uk/scheduled/my_script.php

Acabei de instalar o script em outro servidor Apache e ele é executado corretamente quando chamado pelo navegador. No entanto, quando tento usar o cron, o daemon do cron fornece a mensagem:

-: warning: setlocale: LC_ALL: cannot change locale (en_GB.utf-8)
-: wget: command not found

Quando tentei

0 3 * * * /usr/bin/env wget -q -O /dev/null http://www.mydomain.org.uk/scheduled/my_script.php

Recebi a mensagem:

-: warning: setlocale: LC_ALL: cannot change locale (en_GB.utf-8)
-: /usr/bin/env: No such file or directory

Primeiramente, estou certo em assumir que o aviso de setlocale não é relevante para o problema?

Eu também tentei

0 3 * * * /usr/bin/php /var/www/vhosts/mydomain/httpdocs/scheduled/my_script.php

que dá

-: /usr/bin/php: No such file or directory

Eu também tentei colocar um shebang como a primeira linha do meu script e fazer o cron chamá-lo usando o caminho completo. O daemon do cron relatou que não havia tal arquivo ou diretório como /[full_path]/my_script.php.

Tentando usar o curl não foi melhor.

Eu não tenho acesso ao shell do servidor e estou configurando a tarefa cron através do painel de controle do Plesk. O cron job parece estar sendo executado conforme planejado. O administrador do sistema fez o seguinte para mim:

#which php
/usr/bin/php

#which wget
/usr/bin/wget

#which curl
/usr/bin/curl

Isso parece confirmar que os comandos estão no local certo.

O texto acima é um histórico abreviado - perdi a conta das permutações e combinações que tentei, principalmente como resultado da leitura de conselhos neste e em outros fóruns.

Alguém pode me dizer por que o cron job não consegue encontrar os comandos e sugerir uma solução?

    
por user32706 20.02.2013 / 13:01

2 respostas

13

Seu shell sabe onde encontrar executáveis procurando em seu PATH , que é definido pelo seu ambiente. cron não compartilha o mesmo ambiente. Adicionar isto no topo do crontab deve dizer onde encontrar comandos como você espera:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
por 20.02.2013 / 13:10
2

Indo pelos sintomas relatados, isso vai além de um PATH quebrado: isso não afetaria /usr/bin/env . No entanto, é difícil ter certeza porque seu relatório é inconsistente. Você escreveu /usr/bin/env ou usr/bin/env ?

Verifique se há apenas caracteres ASCII no seu crontab, sem espaços inquebráveis ou caracteres não imprimíveis. Além disso, verifique se você não definiu algumas variáveis de ambiente que podem estar causando problemas, como PATH ou LD_LIBRARY_PATH .

Se /usr/bin/env: No such file or directory sugerir que existe uma configuração incorreta no servidor que você não pode corrigir. O ambiente virtual ou a estrutura de segurança no servidor não permite que você execute comandos, pelo menos do cron. É impossível saber o que pode estar errado sem saber que tipo de ambiente o servidor está executando. Isso é algo que o administrador do sistema deve corrigir.

O erro setlocale não é a causa do problema, mas pode ser outro sintoma.

    
por 21.02.2013 / 02:35

Tags