Como posso fazer com que o crontab use um local de instalação diferente do PHP?

1

Eu tenho uma configuração do MAMP que executa o PHP 5.3.5 no meu computador Mac OS X 10.5. Eu estou tentando instalar um crontab que executa um script PHP, que está localizado no meu servidor MAMP. Eu só posso obter o crontab para executar se eu usar a instalação do php de / usr / bin / php, que é a versão 5.2.15. Em outras palavras, esta é a instalação do MAC OS X pré-instalada do PHP. Como posso usar a versão do PHP do meu MAMP ao executar o crontab? Eu não tenho conhecimento suficiente com o unix para instalar uma nova versão do PHP em / usr / bin / php, embora isso funcionasse?

Eu quero que o crontab execute meu script PHP usando a versão do MAMP do PHP; isso é porque eu sei que o script é executado com sucesso, e eu recebo a saída desejada. No entanto, quando tento executar o crontab usando a instalação do PHP padrão do sistema em / usr / bin / php, recebo erros de PHP Fatais.

-

Caso isso possa ser útil, aqui está o resultado de / usr / bin / php vs. versão do MAMP. O primeiro exemplo de código executa meu script php com sucesso:

$  MAMP_PHP_PATH="/applications/mamp/bin/php5.3/bin/php"
$  $MAMP_PHP_PATH -f /path/to/my/script.php

Agora, aqui está o que acontece quando eu simplesmente executo o seguinte comando:

$  # whereis php in this case returns usr/bin/php
$  php -f /path/to/my/script.php

Resulta no seguinte erro (formatando o meu):

Fatal error: require_once(): 
Failed opening required '/path/to/includes/initialize.php' 
(include_path='.:') in /path/to/my/script.php on line 3

Finalmente, é assim que meu arquivo crontab se parece (com o php do MAMP):

15 * * * * /Applications/MAMP/bin/php5.3/bin/php /path/to/my/script.php

E sem o php do MAMP:

15 * * * * php /path/to/my/script.php

Obrigado

    
por Danny Bullis 22.06.2012 / 18:02

2 respostas

1

A resposta BREVE : Por fim, acabei de instalar a mais nova versão do PHP no meu sistema.

A LONG resposta (e toda a dor que eu passei ao longo do caminho):
Continuei recebendo um erro quando o crontab era executado, o que indicava que uma determinada classe que instanciei no meu script - SoapClient - não estava sendo encontrada. Minha função de autoload também não estava encontrando; portanto, como mostrado no OP, eu estava recebendo este erro:

Fatal error: require_once(): 
Failed opening required '/path/to/includes/initialize.php' 
(include_path='.:') in /path/to/my/script.php on line 3

Houve outro erro similar que eu continuei recebendo assim, e eu descobri que o problema era que a versão antiga do php não tinha a extensão SOAP ativada, e quando a função autoload procurava por ela, checava o php O arquivo php.ini da instalação para a linha: include_path e verifica os diretórios nele para encontrar a classe SOAP que eu estava tentando incluir. Quando não conseguiu encontrar a classe, resultou um erro fatal. Nota : ( include_path no seu arquivo php.ini funciona de forma semelhante à variável $ PATH no seu ambiente Unix).

Eu usei o comando locate php.ini e um pouco de intuição e descobri que o arquivo php.ini do meu sistema estava em /private/etc/php.ini.default . Esta era a localização do arquivo antigo php.ini - o da versão 5.2 do php. O ponto é, sabão simplesmente não foi ativado e, portanto, o parâmetro include_path do meu arquivo php.ini não encontrou sua localização.

Então, eu fiz o download do PHP 5.4.4 e executei os seguintes comandos:

$ ./configure --enable-soap --with-mysql
$ make
$ make install

A instalação foi feita em /usr/local/bin . No entanto, a instalação do php root estava em /usr/bin , então eu fiz o seguinte comando para mover todo o conteúdo de /usr/local/bin para /usr/bin , para sobrescrever a versão antiga do php:

$ sudo cp -Rvf /usr/local/bin/ /usr/bin

Eu especifico:
-R para copiar TODOS os arquivos dentro da /usr/local/bin/ heirarchy, -v para simplesmente exibir uma mensagem de saída informando quais arquivos são movidos à medida que o processo ocorre e -f , o que permite me sobrescrever os arquivos aplicáveis em /usr/bin conforme desejado.

Depois que eu substituí a versão antiga do PHP pela nova versão, a localização do novo arquivo php.ini estava em outro lugar. Mas onde? Eu corri isto para descobrir:

$ php -i | grep -i "configuration file"
  Configuration File (php.ini) Path => /usr/local/lib
  Loaded Configuration File => /usr/local/lib/php.ini

Depois de fazer as alterações aplicáveis, eu sobrei o arquivo em /private/etc/php.ini.default com o novo arquivo php.ini que veio com a minha instalação do PHP 5.4.4.

Viola. O cron job está funcionando e eu não precisei especificar um caminho php diferente. Felicidades!

    
por 26.06.2012 / 22:44
1

Defina as variáveis de ambiente que você precisa no crontab. Por exemplo:

PATH=/Applications/MAMP/bin/php5.3/bin:/usr/local/bin:/usr/bin:/bin
MAMP_PHP_PATH=/applications/mamp/bin/php5.3/bin/php
15 * * * * php /path/to/my/script.php
    
por 23.06.2012 / 02:38

Tags