Categories: How ToMagento 2

How to Programmatically Check Particular Cron is Currently Running or not in Magento 2

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.

  • Re-indexing
  • Catalog price rules
  • Sending newsletters
  • Generating Google Sitemaps
  • Customer notifications or alert messages
  • Auto update currency rates
  • Scheduled database logs cleanups
  • Cache cleanups
  • Generating site maps and more.

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-&gt;logger = $logger;
             $this-&gt;cronCollection  = $cronCollection;
}
public function execute()
{
    try
    {
        if ($this-&gt;isCronrunning(‘vendor_extension_cronname')) {
            $this-&gt;logger-&gt;critical('vendor_extension_cronname Job Run');
            return;
        }
        //Do YOUR FURTHER LOGIC HERE
    }
    catch (\Exception $e)
    {
           $this-&gt;logger-&gt;critical($e-&gt;getMessage());
    }
}
public function isCronrunning($croncode)
{
 $currentRunningJob = $this-&gt;cronCollection-&gt;create()
        -&gt;addFieldToFilter('job_code', $croncode)
        -&gt;addFieldToFilter('status', 'running')
     -&gt;setPageSize(1);
 
 if ($currentRunningJob-&gt;getSize()) {
     $jobScheduledAtDate =  $this-&gt;cronCollection-&gt;create()
            -&gt;addFieldToFilter('job_code', $jobCode)
            -&gt;addFieldToFilter('scheduled_at', $currentRunningJob-&gt;getFirstItem()-&gt;getScheduledAt())
            -&gt;addFieldToFilter('status', ['in' =&gt; ['success', 'failed']]);
 
     return ($jobScheduledAtDate-&gt;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!

Click to rate this post!
[Total: 8 Average: 3.5]
Dhiren Vasoya

Dhiren Vasoya is a Director and Co-founder at MageComp, Passionate ?️ Certified Magento Developer?‍?. He has more than 9 years of experience in Magento Development and completed 850+ projects to solve the most important E-commerce challenges. He is fond❤️ of coding and if he is not busy developing then you can find him at the cricket ground, hitting boundaries.?

View Comments

  • Incomplete blog about file
    app\code\Vendor\Extesnion\Model\ResourceModel\Cron\Collection.php

Recent Posts

How to Add Tooltip in Checkout Shipping Field in Magento 2?

Hello Magento Friends, In today’s blog, I will explain How to Add Tooltip in Checkout…

3 days ago

How to Integrate and Use MongoDB with Laravel?

MongoDB is a popular NoSQL database that offers flexibility and scalability when handling modern web…

4 days ago

NodeJS | Callback Function

In NodeJS, callbacks empower developers to execute asynchronous operations like reading files, handling requests, and…

5 days ago

How to Show SKU in Order Summary in Magento 2?

Hello Magento Friends, In today’s blog, we will learn How to Show SKU in Order…

7 days ago

Best Colors to Use for CTA Buttons

The "Buy Now" and "Add to Cart" buttons serve as the primary call-to-action (CTA) elements…

1 week ago

Magento 2: How to Save Custom Field Value to quote_address for Multi-Shipping Orders

Hello Magento Friends, In Magento 2, the checkout process allows customers to choose multiple shipping…

1 week ago