Magento PHP cron job falha ao abrir arquivos php necessários

1

Estamos tentando configurar o cron job para o site do Magento.

Tentamos este trabalho, mas não funcionou para nós:

*/5 * * * * php -f /var/www/html/sitename/cron.php

Para depurar, tentamos este trabalho:

*/5 * * * * /usr/bin/php  -q /var/www/html/sitename/cron.php > 
/var/www/html/sitename/cron-temp.log 2>&1

Como resultado, encontramos esses erros em cron-temp.log :

PHP Warning:  require(app/bootstrap.php): failed to open stream:
 No such file or directory in /var/www/html/sitename/cron.php on line 30

    PHP Fatal error:  require(): Failed opening required 'app/bootstrap.php' 
(include_path='.:/usr/share/php:/usr/share/pear') in /var/www/html/sitename
/cron.php on line 30

cron.php

<?php


// Change current directory to the directory of current script
chdir(dirname(__FILE__));

require 'app/bootstrap.php';
require 'app/Mage.php';

if (!Mage::isInstalled()) {
    echo "Application is not installed yet, please complete install wizard first.";
    exit;
}

// Only for urls
// Don't remove this
$_SERVER['SCRIPT_NAME'] = str_replace(basename(__FILE__), 'index.php', $_SERVER['SCRIPT_NAME']);
$_SERVER['SCRIPT_FILENAME'] = str_replace(basename(__FILE__), 'index.php', $_SERVER['SCRIPT_FILENAME']);

Mage::app('admin')->setUseSessionInUrl(false);

umask(0);

$disabledFuncs = explode(',', ini_get('disable_functions'));
$isShellDisabled = is_array($disabledFuncs) ? in_array('shell_exec', $disabledFuncs) : true;
$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;
$isShellDisabled = true;

try {
    if (stripos(PHP_OS, 'win') === false) {
        $options = getopt('m::');
        if (isset($options['m'])) {
            if ($options['m'] == 'always') {
                $cronMode = 'always';
            } elseif ($options['m'] == 'default') {
                $cronMode = 'default';
            } else {
                Mage::throwException('Unrecognized cron mode was defined');
            }
        } else if (!$isShellDisabled) {
            $fileName = basename(__FILE__);
            $baseDir = dirname(__FILE__);
            shell_exec("/bin/sh $baseDir/cron.sh $fileName -mdefault 1 > /dev/null 2>&1 &");
            shell_exec("/bin/sh $baseDir/cron.sh $fileName -malways 1 > /dev/null 2>&1 &");
            exit;
        }
    }

    Mage::getConfig()->init()->loadEventObservers('crontab');
    Mage::app()->addEventArea('crontab');
    if ($isShellDisabled) {
        Mage::dispatchEvent('always');
        Mage::dispatchEvent('default');
    } else {
        Mage::dispatchEvent($cronMode);
    }
} catch (Exception $e) {
    Mage::printException($e);
    exit(1);
}
    
por spylh9999ggr 13.05.2016 / 08:02

3 respostas

2
PHP Fatal error:  require(): Failed opening required 'app/bootstrap.php' 
(include_path='.:/usr/share/php:/usr/share/pear')

Parece que seus arquivos required não podem ser encontrados e, portanto, está causando o erro. Eu presumo que esses arquivos estão em /var/www/html/sitename/app/ ? Nesse caso, adicione a seguinte linha no início de seu cron.php :

set_include_path('/var/www/html/sitename/');

Você também pode precisar modificar suas declarações require para incluir uma barra no início do endereço:

require '/app/bootstrap.php';
require '/app/Mage.php';
    
por Carrosive 18.05.2016 / 11:42
1

Este é um palpite muito complicado, mas o include pode estar falhando por causa das permissões de diretório / arquivo.

Verifique se o usuário para o qual você está executando a tarefa do cron tem todos os direitos para acessar o diretório em que cron.php file é e todos os arquivos que ele abre.

Você pode ter ajustado as permissões para o servidor da Web que é executado em www-data , mas está executando o cronjob de f.e. magento user.

Você pode adicionar mais informações à sua pergunta sobre o ambiente ( id -u ) e permissões ( ls -l /var/www/html/sitename/* ) para depurar ainda mais o seu problema.

    
por oerdnj 24.05.2016 / 13:57
0

Como outros já mencionaram, seu cron daemon está funcionando corretamente, mas o PHP está tendo problemas para encontrar os arquivos necessários que o cron.php requer para executar. O PHP procura por estes nos caminhos de inclusão especificados pelo php.ini e, adicionalmente, na raiz do documento para o módulo do apache, assim porque o próprio site funciona, para a versão de linha de comando do PHP, este caminho adicional é o diretório atual.

Ele deve funcionar se você garantir que o PHP seja executado a partir da raiz do documento, ou seja, alterar o cron para executar o comando da seguinte forma:

*/5 * * * * cd /var/www/html/sitename && php -f /var/www/html/sitename/cron.php
    
por MttJocy 24.05.2016 / 01:14