cron 工作正在 magento 站点工作-但没有找到心跳

Posted

技术标签:

【中文标题】cron 工作正在 magento 站点工作-但没有找到心跳【英文标题】:cron job is working in magento site- But No heartbeat found 【发布时间】:2016-09-09 04:51:24 【问题描述】:

对于我们的 magento 网站,cron 作业突然停止工作。

当我们尝试使用以下命令设置 cron 作业时,它会给出错误:

-bash: */5: No such file or directory

命令:

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

编辑

我们在同一台服务器上有 2 个站点。

我们有一个自定义模块来检查 cron 是否正常工作。

在一个站点中,我们收到以下消息

在另一个网站上,这条消息:

cron.php

<?php
/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/osl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magento.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magento.com for more information.
 *
 * @category    Mage
 * @package     Mage
 * @copyright  Copyright (c) 2006-2015 X.commerce, Inc. (http://www.magento.com)
 * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */

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


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);


?>

<?php
Mage::log('cron working', null, 'cron.log');
?>

当我在 cron.php 末尾添加此代码并在浏览器中运行该文件时,它显示:Tuesday 17th of May 2016 07:12:03 PM 所以似乎 cron 正在运行。但是为什么找不到心跳?

try 
   $myFile = "cronlog.txt";
   $fh = fopen($myFile, 'w');
   $stringData = date('l jS \of F Y h:i:s A');
   fwrite($fh, $stringData);
   fclose($fh);
 catch (Exception $e) 
   Mage::printException($e);

编辑 2

在电子邮件中我们收到这些错误:

执行 searchsphinx_check_daemon 时出现 Cron 错误:

exception 'Mage_Core_Exception' with message 'Too late for the schedule.' inapp/Mage.php:595
Stack trace:
#0app/code/community/Aoe/Scheduler/Model/Observer.php(47): Mage::throwException('Too late for th...')
#1app/code/core/Mage/Core/Model/App.php(1338): Aoe_Scheduler_Model_Observer->dispatch(Object(Varien_Event_Observer))
#2app/code/core/Mage/Core/Model/App.php(1317): Mage_Core_Model_App->_callObserverMethod(Object(Aoe_Scheduler_Model_Observer), 'dispatch', Object(Varien_Event_Observer))
#3app/Mage.php(448): Mage_Core_Model_App->dispatchEvent('default', Array)
#4cron.php(76): Mage::dispatchEvent('default')
#5 main

cron 日志

2016-05-24T12:30:02+00:00 DEBUG (7): Start: captcha_delete_old_attempts
2016-05-24T12:30:02+00:00 DEBUG (7): Stop: captcha_delete_old_attempts
2016-05-24T12:30:02+00:00 DEBUG (7): Start: mstcore_logger_cron
2016-05-24T12:30:02+00:00 DEBUG (7): Stop: mstcore_logger_cron
2016-05-24T12:30:02+00:00 DEBUG (7): Start: newsletter_send_all
2016-05-24T12:30:02+00:00 DEBUG (7): Stop: newsletter_send_all
2016-05-24T12:30:02+00:00 DEBUG (7): Start: searchsphinx_check_daemon
2016-05-24T12:30:02+00:00 DEBUG (7): Stop: searchsphinx_check_daemon
2016-05-24T12:30:02+00:00 DEBUG (7): Start: searchsphinx_reindex_delta_job
2016-05-24T12:30:02+00:00 DEBUG (7): Stop: searchsphinx_reindex_delta_job
2016-05-24T12:30:02+00:00 DEBUG (7): Start: xmlconnect_notification_send_all
2016-05-24T12:30:02+00:00 DEBUG (7): Stop: xmlconnect_notification_send_all
2016-05-24T12:30:03+00:00 DEBUG (7): Start: aoescheduler_heartbeat
2016-05-24T12:30:03+00:00 DEBUG (7): Stop: aoescheduler_heartbeat
2016-05-24T12:30:03+00:00 DEBUG (7): Start: captcha_delete_expired_images
2016-05-24T12:30:03+00:00 DEBUG (7): Job "captcha_delete_expired_images" (id: 133636) is locked. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Stop: captcha_delete_expired_images
2016-05-24T12:30:03+00:00 DEBUG (7): Start: captcha_delete_old_attempts
2016-05-24T12:30:03+00:00 DEBUG (7): Job "captcha_delete_old_attempts" (id: 133638) is locked. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Stop: captcha_delete_old_attempts
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:31" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:32" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:33" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "aoescheduler_heartbeat" at "2016-05-24 12:35" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "aoescheduler_heartbeat" at "2016-05-24 12:40" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "aoescheduler_heartbeat" at "2016-05-24 12:45" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "captcha_delete_expired_images" at "2016-05-24 12:40" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "aoescheduler_heartbeat" at "2016-05-24 12:35" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "aoescheduler_heartbeat" at "2016-05-24 12:40" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "aoescheduler_heartbeat" at "2016-05-24 12:45" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "captcha_delete_expired_images" at "2016-05-24 12:40" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Generated schedule. Newest task is scheduled at "2016-05-24 12:49:00". (Duration: 0.37 sec)
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "newsletter_send_all" at "2016-05-24 12:35" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "newsletter_send_all" at "2016-05-24 12:40" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "newsletter_send_all" at "2016-05-24 12:45" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:31" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:32" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:33" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:34" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:35" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:36" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:37" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:38" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:39" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:40" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:41" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:42" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "newsletter_send_all" at "2016-05-24 12:35" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:43" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "newsletter_send_all" at "2016-05-24 12:40" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:44" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:45" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "newsletter_send_all" at "2016-05-24 12:45" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:46" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:47" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:48" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:49" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_reindex_delta_job" at "2016-05-24 12:45" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:31" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:32" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:33" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:34" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:35" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:36" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:37" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:38" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "xmlconnect_notification_send_all" at "2016-05-24 12:35" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:39" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:40" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "xmlconnect_notification_send_all" at "2016-05-24 12:40" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:41" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:42" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "xmlconnect_notification_send_all" at "2016-05-24 12:45" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:43" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:44" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Generated schedule. Newest task is scheduled at "2016-05-24 12:49:00". (Duration: 0.21 sec)
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:45" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:46" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:47" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:48" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_check_daemon" at "2016-05-24 12:49" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "searchsphinx_reindex_delta_job" at "2016-05-24 12:45" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "xmlconnect_notification_send_all" at "2016-05-24 12:35" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "xmlconnect_notification_send_all" at "2016-05-24 12:40" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Pending schedule for "xmlconnect_notification_send_all" at "2016-05-24 12:45" already exists 1 times. Skipping.
2016-05-24T12:30:03+00:00 DEBUG (7): Generated schedule. Newest task is scheduled at "2016-05-24 12:49:00". (Duration: 0.28 sec)
2016-05-24T12:31:02+00:00 DEBUG (7): Start: mstcore_logger_cron
2016-05-24T12:31:02+00:00 DEBUG (7): Stop: mstcore_logger_cron
2016-05-24T12:31:02+00:00 DEBUG (7): Start: newsletter_send_all
2016-05-24T12:31:02+00:00 DEBUG (7): Stop: newsletter_send_all
2016-05-24T12:31:02+00:00 DEBUG (7): Start: aoescheduler_heartbeat
2016-05-24T12:31:02+00:00 DEBUG (7): Stop: aoescheduler_heartbeat
2016-05-24T12:31:02+00:00 DEBUG (7): Start: searchsphinx_reindex_delta_job
2016-05-24T12:31:02+00:00 DEBUG (7): Stop: searchsphinx_reindex_delta_job
2016-05-24T12:31:02+00:00 DEBUG (7): Start: captcha_delete_expired_images
2016-05-24T12:31:02+00:00 DEBUG (7): Stop: captcha_delete_expired_images
2016-05-24T12:31:02+00:00 DEBUG (7): Start: xmlconnect_notification_send_all
2016-05-24T12:31:02+00:00 DEBUG (7): Stop: xmlconnect_notification_send_all
2016-05-24T12:31:02+00:00 DEBUG (7): Start: captcha_delete_old_attempts
2016-05-24T12:31:02+00:00 DEBUG (7): Stop: captcha_delete_old_attempts
2016-05-24T12:31:02+00:00 DEBUG (7): Start: searchsphinx_check_daemon
2016-05-24T12:31:02+00:00 DEBUG (7): Stop: searchsphinx_check_daemon
2016-05-24T12:32:02+00:00 DEBUG (7): Start: searchsphinx_check_daemon
2016-05-24T12:32:02+00:00 DEBUG (7): Stop: searchsphinx_check_daemon

【问题讨论】:

Failed to open stream : No such file or directory的可能重复 您的数据库中的select * from cron_schedule where job_code like '%heartbeat%' 会返回给您什么? @b.enoit.be 它的显示如下:prnt.sc/b6799r @nsdlfefinedieicbe 1) 你绝对可以从那里删除那些真正旧的“运行”行(ids 43724、44217、44218)。 2) 那么对于 cron 上的错误,你在服务器上的 crontab 是什么样子的呢? 【参考方案1】:
*/5 * * * * date >> /var/www/html/magento/var/log/cron.log;/bin/sh -f /var/www/html/magento/cron.sh >> /var/www/html/magento/var/log/cron.log;

我们还以 apache 用户身份运行 crontab,因为 apache 是我们所有 magento 文件的所有者:

sudo crontab -e -u apache

【讨论】:

crontab : user apache unknown我们在尝试sudo crontab -e -u apache时发现了这个错误 apache 是我们的用户,它在所有系统上都不相同,对于您的 magento 文件所有者的子 apache。我相信 www-data 在 Ubuntu 上是默认的 哎呀,它的错字,我不知道,我尝试使用 crontab -e 并执行了你的命令。编辑了评论。 当我关注@RThomas 的answer 时,我在cronlog.txt 文件中得到了Tuesday 17th of May 2016 07:12:03 PM 但这里的当前时间是 `5 月 18 日星期三 12:46:47 AM。这个时间差是否与magento中的某些配置有关。 ?意味着 cron 在我们的服务器上工作吗?【参考方案2】:

如果您在同一服务器上有两个站点,请确保为每个站点调用 cron.php。

您的 cron 无法正常运行的另一个原因是您的工作需要一些时间,而另一个工作根本没有开始。

您可以在表 cron_schedule 中检查 db 中 cron 作业的状态。在此表中,您可以查看有关每个作业、开始和结束时间以及错误的详细信息。

【讨论】:

它的显示如下:prnt.sc/b67a3c,但不知道为什么 Heartbeat 没有在后端显示。 请检查更新的问题。我更新了即将通过电子邮件发送的 cron 错误。【参考方案3】:

请检查: https://gielberkers.com/solving-too-late-for-the-schedule-with-magento-crons/

它将为您提供检查/验证设置的可能选项。

还要检查“date_default_timezone_set”字的扩展代码,看看默认值是多少。和你的magento商店一样吗?

【讨论】:

【参考方案4】:

我猜你需要在你的服务器中设置两个 cron 作业。尝试通过给出路径来运行另一个站点的 cron.php。

喜欢

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

同时检查 cron 日志

sudo grep CRON /var/log/syslog

执行这个命令可以查看你的cron是否在运行。

【讨论】:

@nsdlfefinedieicbe 更新答案,检查你的 cron 日志

以上是关于cron 工作正在 magento 站点工作-但没有找到心跳的主要内容,如果未能解决你的问题,请参考以下文章

Magento - cron 作业脚本正在运行,但 Magento 订单确认电子邮件未发送

用于 magmi 导入的 Cron 作业

Magento 站点切换.htaccess

Paypal IPN 在 Magento 站点和另一个不同方面失败 - 冲突

如何使用 facebook 应用程序让 magento 多商店工作

如何在magento管理站点块中翻译变量