One of the most stunning features of Magento 2 is cron job that enables you to execute repetitive task periodically without any efforts. You can use this cron job to run various scheduled tasks, like.
With just a date and time you are done with setting up cron. After that, the Magento cronjob manager will list all cron jobs and run it sequentially. When there is a number of cron jobs listed, you don’t know which job is currently in progress. Because of that, sometimes it happens when there is less time between executions of crons, it may create conflictions with one another. That’s the reason we always recommend you to check that particular cron is executed or not?
So, we are back with a super exciting blog that will help you to know which cron job is currently running on your Magento 2 Server using this small piece of code.
In the first step, we need to create a cron using “crontab.xml” file at the following location.
app\code\Vendor\Extension\etc\crontab.xml
<pre class="lang:default decode:true"><!--?xml version="1.0"?--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd"> <group id="default"> <job name="reviewreminder_cron" instance="Magecomp\Reviewreminder\Cron\Reviewcron" method="execute"> <schedule> */5 * * * *</schedule> </job> </group> </config> </pre>
Now, in second step, we need to create one more file named “Mycronfile.php” at this path.
app\code\Vendor\Extension\Cron\Mycronfile.php
<pre class="lang:default decode:true"><!--?php namespace Vendor\Extension\Cron; class Mycronfile { public $logger; public $cronCollection; public function __construct( \Psr\Log\LoggerInterface $logger, \Vendor\Extension\Model\ResourceModel\Cron\CollectionFactory $cronCollection, ) { $this->logger = $logger; $this->cronCollection = $cronCollection; } public function execute() { try { if ($this->isCronrunning(‘vendor_extension_cronname')) { $this->logger->critical('vendor_extension_cronname Job Run'); return; } //Do YOUR FURTHER LOGIC HERE } catch (\Exception $e) { $this->logger->critical($e->getMessage()); } } public function isCronrunning($croncode) { $currentRunningJob = $this->cronCollection->create() ->addFieldToFilter('job_code', $croncode) ->addFieldToFilter('status', 'running') ->setPageSize(1); if ($currentRunningJob->getSize()) { $jobScheduledAtDate = $this->cronCollection->create() ->addFieldToFilter('job_code', $jobCode) ->addFieldToFilter('scheduled_at', $currentRunningJob->getFirstItem()->getScheduledAt()) ->addFieldToFilter('status', ['in' => ['success', 'failed']]); return ($jobScheduledAtDate->getSize()) ? true : false; } return false; } } </pre>
In this third and last step we need to create cron collection file at this path. app\code\Vendor\Extesnion\Model\ResourceModel\Cron\Collection.php
<pre class="lang:default decode:true"> <!--?php namespace Vendor\Extension\Model\ResourceModel\Cron; class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { protected $_idFieldName = 'schedule_id'; public function _construct() { $this->_init(\Magento\Cron\Model\Schedule::class, \Magento\Cron\Model\ResourceModel\Schedule::class); } } </pre>
That’s it for today, Let us know if you are facing an issue while implementing using this code by commenting below.
Happy Croning!
Hello Magento Friends, In today’s blog, I will explain How to Add Tooltip in Checkout…
MongoDB is a popular NoSQL database that offers flexibility and scalability when handling modern web…
In NodeJS, callbacks empower developers to execute asynchronous operations like reading files, handling requests, and…
Hello Magento Friends, In today’s blog, we will learn How to Show SKU in Order…
The "Buy Now" and "Add to Cart" buttons serve as the primary call-to-action (CTA) elements…
Hello Magento Friends, In Magento 2, the checkout process allows customers to choose multiple shipping…
View Comments
Incomplete blog about file
app\code\Vendor\Extesnion\Model\ResourceModel\Cron\Collection.php