Skip to content
Sven edited this page Dec 22, 2017 · 9 revisions

Crontab integration

*    *  *   *   *      php /var/www/bin/console pm:tool:cron -r one_minute         --env=prod > /dev/null 2>&1
*/2  *  *   *   *      php /var/www/bin/console pm:tool:cron -r two_minutes        --env=prod > /dev/null 2>&1
*/5  *  *   *   *      php /var/www/bin/console pm:tool:cron -r five_minutes       --env=prod > /dev/null 2>&1
*/10 *  *   *   *      php /var/www/bin/console pm:tool:cron -r ten_minutes        --env=prod > /dev/null 2>&1
*/20 *  *   *   *      php /var/www/bin/console pm:tool:cron -r twenty_minutes     --env=prod > /dev/null 2>&1
0    *  *   *   *      php /var/www/bin/console pm:tool:cron -r one_hour           --env=prod > /dev/null 2>&1
0   12  *   *   *      php /var/www/bin/console pm:tool:cron -r daily_noon         --env=prod > /dev/null 2>&1
0    6  *   *   *      php /var/www/bin/console pm:tool:cron -r daily_morning      --env=prod > /dev/null 2>&1
0    3  *   *   *      php /var/www/bin/console pm:tool:cron -r daily_night        --env=prod > /dev/null 2>&1
59   3  *   *   *      php /var/www/bin/console pm:tool:cron -r first_day_of_month --env=prod > /dev/null 2>&1

Cronjob Listener

services.yml

acme.listener.your_cronjob_listener:
    class: AcmeBundle\Listener\YourCronjobListener
    tags:
        - { name: kernel.event_listener, event: pm__tool.framework_events.cron_event, method: onEveryMinuteRepeated, priority: 1 }
        # Available for Symfony3: - { name: kernel.event_listener, event: console.command, method: onConfiguration, priority: 1 }

YourCronjobListener.php

namespace AppBundle\EventListener;

use PM\Bundle\ToolBundle\Framework\Events\CronEvent;
use PM\Bundle\ToolBundle\Framework\Interfaces\CronEventListenerInterface;


/**
 * Class YourCronjobListener
 *
 * @package AppBundle\EventListener
 */
class YourCronjobListener implements CronEventListenerInterface
{
    /**
     * Every Minute
     *
     * @param CronEvent $event
     *
     * @return null
     */
    public function onEveryMinuteRepeated(CronEvent $event)
    {
        if (false === $event->isExecuting($this, self::getRepeatedType())) {
            return null;
        }

        /* Your code */
    }

    /**
     * On Configuration (Available since Symfony 3)
     *
     * @param ConsoleCommandEvent $event
     */
    public function onConfiguration(ConsoleCommandEvent $event)
    {
        if ($event->getCommand() instanceof CronCommand) {
            $event->getCommand()->addOption('some-option', null, InputOption::VALUE_OPTIONAL, 'Some extra option for cronjobs', []);
        }
    }

    /**
     * Get Repeated Type
     *
     * @return string
     */
    public static function getRepeatedType()
    {
        return CronEvent::REPEATED_EVERY_MINUTE;
    }
}

Debugging

You can call your Listener without any other:

php bin/console pm:tool:cron --target=YourCronjobListener

Clone this wiki locally