There is no config to register a cron job in OroPlatform. There are 2 steps to add a cron job:
oro_cron_schedule
The added class can be run as a command in CLI when it is defined as a Service.
src\Stars\Bundle\LoggerEventBundle\Command\InsertActionDataCommand.php
<?php
namespace Stars\Bundle\LoggerEventBundle\Command;
use Oro\Bundle\CronBundle\Command\CronCommandInterface;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class InsertActionDataCommand extends Command implements CronCommandInterface
{
/**
* Command name for cron must start with the namesapce "oro:cron";
* see vendor\oro\platform\src\Oro\Bundle\CronBundle\Command\CronDefinitionsLoadCommand.php
*/
const COMMAND_NAME = 'oro:cron:sc-logger-event:insert-action-data';
/**
* The max number of events to read from STARS
*/
const LIMIT_EVENTS = 80;
/**
* {@inheritDoc}
*/
public function isActive()
{
return true;
}
/**
* {@inheritDoc}
*/
public function getDefaultDefinition()
{
return '0 1 * * *';
}
/**
* {@inheritdoc}
*/
public function configure()
{
$this
->setName(static::COMMAND_NAME)
->setDescription('Insert unserialized action_data from STARS to table sc_stars_logger_event_action_data')
->addOption(
'limit',
'l',
InputOption::VALUE_OPTIONAL,
'The max number of events to read from STARS.',
self::LIMIT_EVENTS
);
}
/**
* {@inheritDoc}
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$cnt = $this->insertByEntity((int) $input->getOption('limit'));
$output->writeln(sprintf('<comment>Rows Inserted:</comment> %d', $cnt));
}
}
[kiat@reporting misoro]$ sudo -u nginx php bin/console oro:cron:definitions:load
Removing all previously loaded commands...
Processing command "oro:cron:sc-logger-event:insert-action-data": setting up schedule..
Processing command "oro:cron:message-queue:cleanup": setting up schedule..
Processing command "oro:cron:message-queue:consumer_heartbeat_check": setting up schedule..
Processing command "oro:cron:email-body-sync": setting up schedule..
Processing command "oro:cron:definitions:load": Skipping, the command does not implement CronCommandInterface
Processing command "oro:cron:integration:cleanup": setting up schedule..
Processing command "oro:cron:integration:sync": setting up schedule..
Processing command "oro:cron:import-clean-up-storage": setting up schedule..
Processing command "oro:cron:batch:cleanup": setting up schedule..
Processing command "oro:cron:imap-sync": setting up schedule..
Processing command "oro:cron:imap-credential-notifications": setting up schedule..
Processing command "oro:cron:calendar:date": setting up schedule..
Processing command "oro:cron:send-reminders": setting up schedule..
I need to test and execute the command in bash (and controller if necessary). So, I define the command as a service.
Following OroPlatform convention, command services are configured in the file commands.yml
.
src\Stars\Bundle\LoggerEventBundle\Resources\config\commands.yml
services:
Stars\Bundle\LoggerEventBundle\Command\InsertActionDataCommand:
autowire: true
tags:
- { name: console.command }
#- { name: console.command, command: 'oro:cron:sc-logger-event:insert-action-data' } # it's unnecessary to add the command tag
I configured it for autowiring and
lazy loading
Show archive.org snapshot
. ~I also configured the command name to run in CLI as oro:cron:sc-logger-event:insert-action-data
. Note: it is important to use the same command name as defined in the command class. Otherwise, it will not be loaded as a cron job.~
src\Stars\Bundle\LoggerEventBundle\DependencyInjection\StarsLoggerEventExtension.php
<?php
namespace Stars\Bundle\LoggerEventBundle\DependencyInjection;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
class StarsLoggerEventExtension extends Extension
{
/**
* {@inheritDoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('commands.yml');
}
}
[kiat@reporting misoro]$ sudo -u nginx php bin/console debug:container stars
Select one of the following services to display its information:
[0] Stars\Bundle\EmgsiheDbBundle\Dbal\Connection
[1] Stars\Bundle\LoggerEventBundle\Command\InsertActionDataCommand
> 1
Information for Service "Stars\Bundle\LoggerEventBundle\Command\InsertActionDataCommand"
========================================================================================
---------------- ------------------------------------------------------------------
Option Value
---------------- ------------------------------------------------------------------
Service ID Stars\Bundle\LoggerEventBundle\Command\InsertActionDataCommand
Class Stars\Bundle\LoggerEventBundle\Command\InsertActionDataCommand
Tags console.command (command: stars:logger_event:insert_action_data)
Calls setName
Public no
Synthetic no
Lazy no
Shared yes
Abstract no
Autowired yes
Autoconfigured no
---------------- ------------------------------------------------------------------
[kiat@reporting misoro]$ sudo -u nginx php bin/console stars:logger_event:insert_action_data --help
Usage:
stars:logger_event:insert_action_data [options]
Options:
-l, --limit[=LIMIT] The max number of events to read from STARS. [default: 80]
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-e, --env=ENV The Environment name. [default: "dev"]
--no-debug Switches off debug mode.
--disabled-listeners=DISABLED-LISTENERS Disable optional listeners, "all" to disable all listeners, command "oro:platform:optional-listeners" shows all listeners (multiple values allowed)
--current-user=CURRENT-USER ID, username or email of the user that should be used as current user
--current-organization=CURRENT-ORGANIZATION ID or name of the organization that should be used as current organization
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Help:
Insert unserialized action_data from STARS to table sc_stars_logger_event_action_data
[kiat@reporting misoro]$ sudo -u nginx php bin/console stars:logger_event:insert_action_data
Rows Inserted: 445
There is no specific CLI command to list all the oro:cron
. But there is a hack:
[kiat@reporting misoro]$ sudo -u nginx php bin/console oro:cro
Command "oro:cro" is ambiguous.
Did you mean one of these?
oro:cron:message-queue:cleanup Clear successes and failed jobs from message_queue_job table
oro:cron:message-queue:consumer_heartbeat_check Checks if there is alive consumers
oro:cron:email-body-sync Synchronize email body
oro:cron Cron commands launcher
oro:cron:definitions:load Loads cron commands definitions from application to database.
oro:cron:integration:cleanup Clean up integration statuses history
oro:cron:integration:sync Runs synchronization for integration
oro:cron:import-clean-up-storage Clear old files from import storage.
oro:cron:batch:cleanup Clean up batch history
oro:cron:imap-sync Synchronization emails via IMAP
oro:cron:imap-credential-notifications Send wrong email credentials notifications
oro:cron:calendar:date Generate calendar dates
oro:cron:sc-logger-event:insert-action-data Insert unserialized action_data from STARS to table sc_stars_logger_event_action_data
oro:cron:send-reminders Send reminders
prod
cache If the cron is not added to the Job List in backend and the table oro_message_queue_job
:
[kiat@reporting misoro]$ sudo -u nginx php bin/console oro:cron --env prod
The command "oro:cron:sc-logger-event:insert-action-data" does not exist.
oro:cron [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--disabled-listeners DISABLED-LISTENERS] [--current-user CURRENT-USER] [--current-organization CURRENT-ORGANIZATION] [--] <command>
[kiat@reporting misoro]$ sudo -u nginx php bin/console cache:clear --env prod
// Clearing the cache for the prod environment with debug false
[OK] Cache for the "prod" environment (debug=false) was successfully cleared.
[kiat@reporting misoro]$ sudo -u nginx php bin/console oro:cron --env prod
[kiat@reporting misoro]$