【问题标题】:How to setup cron job in magento?如何在 magento 中设置 cron 作业?
【发布时间】:2014-05-23 17:54:07
【问题描述】:

我正在开发 magento 1.7.0.2 版本。

我想通过邮件向客户发送 csv。 这应该每月使用 magento 中的 cron 作业完成。

对于 cron 作业 config.xml

<crontab>
    <jobs>
        <Module_Store>
            <schedule><cron_expr>0,15,30,45 * * * *</cron_expr></schedule>
            <run><model>clinic/observer::sendMailtoClinic</model></run>
        </Module_Store>
    </jobs>
</crontab>    

Observer.php

class Module_Store_Model_Observer {

  public function sendMailtoClinic(Varien_Event_Observer $observer, $content){                        
    $mail = new Zend_Mail();
    $mail->setType(Zend_Mime::MULTIPART_RELATED);
    $mail->setBodyHtml($html_body);
    $mail->setFrom($from_email, $from_email_name);
    $mail->addTo($to_email, $toEmailName);
    $mail->setSubject($subject);
    $file = $mail->createAttachment(file_get_contents($file_path));
    $file->type = 'text/csv';
    $file->disposition = Zend_Mime::DISPOSITION_INLINE;
    $file->encoding = Zend_Mime::ENCODING_BASE64;
    $file->filename = $file_name;
    $mail->send();
  }
}

cron 的管理员配置是:-

Generate Schedules Every 15
Schedule Ahead for 15
Missed if Not Run Within 35
History Cleanup Every 15
Success History Lifetime 10
Failure History Lifetime 600

任何帮助都会非常感激。

【问题讨论】:

  • 现在我的工作在 cron_schedule 表中列出,但所有工作都显示挂起状态并在数据库中显示“创建时间”和“计划时间”。从过去 1 小时开始等待但“执行于”时间显示为空。
  • 你确定代码正确吗??
  • 是的,代码是正确的。当我安装 AOE 调度程序扩展并生成计划时,它正在工作,但默认情况下(每 15 分钟)它不是 :( 我从浏览器运行 cron.php 但没有运气
  • 你能详细解释一下问题案例吗?
  • cron 作业未在 localhost 上自动运行

标签: magento magento-1.7 crontab email-attachments


【解决方案1】:

如果邮件系统工作正常,但你仍然面临这个问题,那么也试试这个:

用这个替换你的配置代码:

<crontab>
    <jobs>
        <clinic_cron>
            <schedule><cron_expr>0,15,30,45 * * * *</cron_expr></schedule>
            <run><model>clinic/observer::sendMailtoClinic</model></run>
        </clinic_cron>
    </jobs>
</crontab> 


class [Packagename]_Clinic_Model_Observer { // don't forget to mention package name

  public function sendMailtoClinic(Varien_Event_Observer $observer){                        

    $html_body = 'this is html body text';
    $from_email = 'from_email@domain.com';
    $from_email_name = 'sendername';
    $to_email = 'to_email@domain.com';
    $toEmailName = 'receiverName';
    $subject = 'subject text here';
    $file_path = 'here/is/file/path';
    $file_name = 'filename.csv';

    $mail = new Zend_Mail();
    $mail->setType(Zend_Mime::MULTIPART_RELATED);
    $mail->setBodyHtml($html_body);
    $mail->setFrom($from_email, $from_email_name);
    $mail->addTo($to_email, $toEmailName);
    $mail->setSubject($subject);
    $file = $mail->createAttachment(file_get_contents($file_path));
    $file->type = 'text/csv';
    $file->disposition = Zend_Mime::DISPOSITION_INLINE;
    $file->encoding = Zend_Mime::ENCODING_BASE64;
    $file->filename = $file_name;
    $mail->send();
  }
}

在此处的计划任务任务列表中搜索单词“clinic_cron”:系统 > 计划程序 > 列表视图。确保您正在搜索所有计划任务,我的意思是也看到分页;)

希望这会有所帮助!万事如意!

【讨论】:

  • 邮件系统工作正常。唯一的问题是 cron 没有在服务器上自动调度。我需要使用 AOE 调度程序来调度和运行所有 cron 作业
  • 你在 cPanel 上设置了 Cron 吗?
  • 还有一件事,如果 crontab 在这里列出 system > Scheduler > Schedule Configuration,然后通过选择操作“Schedule now”来安排该任务。
  • 是的,我也说同样的事情,使用“现在安排”它正在工作。但它应该是自动启动。我是否在 c-panel 中为此添加任何内容?我该如何添加?你能解释一下吗?
  • 是的,您需要在 cpanel 中设置 cronjob。看到这个magento.stackexchange.com/questions/8012/…
【解决方案2】:

进入 app/code/core/Mage/CatalogRule/etc/config.xml

和放

   <config>
     ...
   <crontab>
    <jobs>
    <catalogrule_apply_all>
        <schedule><cron_expr>0 1 * * *</cron_expr></schedule>
        <run><model>catalogrule/observer::dailyCatalogUpdate</model></run>
    </catalogrule_apply_all>
  </jobs>
    ...
 </crontab>
   ...
  </config>

您可以根据需要更改时间表以获取更多信息,请参阅http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/how_to_setup_a_cron_job

【讨论】:

  • 永远不要更改核心文件。
【解决方案3】:

您所做的所有代码都很好,您只需将 cron.php 设置为服务器上的 cron 作业。

【讨论】: