Magento PHP cron 작업이 필수 PHP 파일을 열지 못함

Magento PHP cron 작업이 필수 PHP 파일을 열지 못함

Magento 사이트에 대한 크론 작업을 설정하려고 합니다.

우리는 이 직업을 시도했지만 우리에게는 효과가 없었습니다.

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

디버깅을 위해 다음 작업을 시도했습니다.

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

그 결과 다음에서 이러한 오류를 발견했습니다 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);
}

답변1

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

required파일을 찾을 수 없어 오류가 발생하는 것 같습니다 . 이 파일이 /var/www/html/sitename/app/? 이 경우 다음 줄을 시작 부분에 추가합니다 cron.php.

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

require주소 시작 부분에 슬래시를 포함하도록 명령문을 수정해야 할 수도 있습니다 .

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

답변2

이것은 정말 터무니없는 추측이지만 디렉터리/파일 권한으로 인해 포함이 실패할 수 있습니다.

cron 작업을 실행 중인 사용자가 파일이 있는 디렉터리 cron.php와 파일이 열리는 모든 파일에 액세스할 수 있는 모든 권한을 가지고 있는지 확인하세요.

에서 실행되는 웹 서버에 대한 권한을 조정했을 수 있지만 fe 사용자 www-data로부터 cronjob을 실행하고 있습니다 .magento

문제를 추가로 디버깅하기 위해 환경( id -u) 및 권한( )에 대한 추가 정보를 질문에 추가할 수 있습니다.ls -l /var/www/html/sitename/*

답변3

다른 사람들이 언급했듯이 cron 데몬은 올바르게 작동하지만 PHP는 cron.php가 실행하는 데 필요한 필수 파일을 찾는 데 문제가 있습니다. PHP는 php.ini에 지정된 포함 경로와 추가로 Apache 모듈의 문서 루트에서 이를 찾습니다. 따라서 사이트 자체가 작동하는 이유는 PHP 명령줄 버전의 경우 이 추가 경로가 현재 작업 디렉터리입니다.

PHP가 문서 루트에서 실행되는지 확인하면 작동합니다. 즉, cron을 변경하여 다음과 같이 명령을 실행하면 작동합니다.

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

관련 정보