Как переопределить crontab существующего модуля


Я не хочу, чтобы Mage_Newsletter постоянно отправлял электронную почту, поэтому я создаю пользовательский модуль внутри local, чтобы удалить cron,

#/var/www/html/public_html/app/code/local/MyComp/CustomConfig/etc/config.xml
<config>
  <modules>
    <MyComp_CustomConfig>
        <version>0.1.0</version>
    </MyComp_CustomConfig>
  </modules>
  <crontab>
    <jobs>
        <newsletter_send_all>
            <run>
                <model>newsletter/observer::scheduledSend</model>
            </run>
        </newsletter_send_all>
    </jobs>
  </crontab>
</config>

Обратите внимание, что у меня нет тега <schedule>

Затем внутри

#/var/www/html/public_html/app/etc/modules/MyComp_CustomConfig.xml
<config>
  <modules>
    <MyComp_CustomConfig>
        <active>true</active>
        <codePool>local</codePool>
    </MyComp_CustomConfig>
    <depends>
        <Mage_Newsletter />
    </depends>
  </modules>
</config>

Я все еще вижу, как newsletter_send_all выполняется внутри таблицы "cron_schedule" после очистки кэша. Я попытался добавить

<schedule>
   <cron_expr>0 3 * * *</cron_expr>
</schedule>

Которые запускаются в 3 часа ночи, очищают кэш и обновляют, но newsletter_send_all все равно выполняются немедленно в моей таблице (еще не 3 часа ночи). Пожалуйста, помогите, кто я такой пропал без вести?

Примечание: мое серверное время не UTC, оно работает с местным часовым поясом.

Author: Thang Pham, 2014-07-02

1 answers

Я обычно так делаю, и это работает.
Вот в чем, я думаю, ваша проблема с этим конкретным cron.
По умолчанию задание newsletter_send_all выполняется каждые 5 минут.
При запуске cron.php magento выполняет задания, которые должны выполняться в данный момент, но планирует их на следующие X минут (я думаю, на 20 минут).
Поэтому, если вы сначала выполнили cron, а newsletter_send_all все еще было установлено на 5 минут, то для следующего запуска было запланировано 3 (или 4) дополнительных задания для newsletter_send_all.

После этого вы изменили cron_expr и снова выполнили cron, но 3 задания, которые были запланированы ранее, все еще запланированы, поэтому они будут выполнены.

Дайте ему полчаса или около того и снова запустите cron. Посмотрите, будет ли рассылка отправлена снова.

И я настоятельно рекомендую это расширение: https://github.com/fbrnc/Aoe_Scheduler . Среди других интересных вещей это позволяет вам видеть, когда запланирован каждый cron, и если ваши изменения на cron_expr учитываются рассмотрение.

 4
Author: Marius, 2014-07-02 07:42:59