Skip to content

Commit 03b909b

Browse files
Merge pull request #9 from DavidLambauer/cron
added cron docs
2 parents 881e49e + ff26a7e commit 03b909b

File tree

1 file changed

+181
-0
lines changed

1 file changed

+181
-0
lines changed

cron-jobs.md

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
# Cron Jobs in Magento 2
2+
3+
- [Introduction](#introduction)
4+
- [Setting up a Cron Job](#setting-up-a-cron-job)
5+
- [Step 1: Declare the Cron Job in `crontab.xml`](#step-1)
6+
- [Step 2: Define the Cron Job Method](#step-2)
7+
- [Executing a Cron Job](#executing-a-cron-job)
8+
- [Viewing and Managing Cron Tasks](#viewing-and-managing-cron-tasks)
9+
- [Cron Groups](#cron-groups)
10+
- [Defining a Cron Group](#defining-a-cron-group)
11+
- [Running a Specific Cron Group](#running-a-specific-cron-group)
12+
- [Benefits of Using Cron Groups](#benefits-of-using-cron-groups)
13+
- [Best Practices for Cron Jobs](#best-practices-for-cron-jobs)
14+
15+
<a href="#introduction"></a>
16+
## Introduction
17+
18+
Cron jobs are scheduled tasks that run automatically at specified intervals. Magento uses cron jobs to run tasks such as
19+
reindexing, generating reports, sending newsletters, and many more. Cron jobs are essential to keep your Magento 2 store
20+
functioning correctly.
21+
22+
<a href="#setting-up-a-cron-job"></a>
23+
## Setting up a Cron Job
24+
25+
Setting up a cron job in Magento involves two main steps: declaring the cron job in the `crontab.xml` file, and defining
26+
the method that will be executed when the cron job runs.
27+
28+
<a href="#step-1"></a>
29+
### Step 1: Declare the Cron Job in `crontab.xml`
30+
31+
First, we need to declare our cron job in a `crontab.xml` file. This file should be located in the `etc` directory of
32+
your module. If it doesn't exist, create one.
33+
34+
The syntax of the `crontab.xml` file is as follows:
35+
36+
```xml
37+
<?xml version="1.0"?>
38+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
39+
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
40+
<group id="default">
41+
<job name="my_cronjob" instance="Vendor\Module\Cron\Test" method="execute">
42+
<schedule>* * * * *</schedule>
43+
</job>
44+
</group>
45+
</config>
46+
```
47+
48+
In the above code:
49+
50+
- `job name`: It's an identifier for your cron job.
51+
- `instance`: This is the class in your module that will be invoked when the cron job runs.
52+
- `method`: This is the method in your class that will be called.
53+
- `schedule`: This determines how often your cron job will run, based on cron syntax.
54+
55+
<a href="#step-2"></a>
56+
### Step 2: Define the Cron Job Method
57+
58+
Now, we need to create the cron class in the `Vendor\Module\Cron` directory and define the `execute()` method. This is
59+
the method that will be executed when the cron job runs.
60+
61+
Here is an example of how to define this method:
62+
63+
```php
64+
<?php
65+
namespace Vendor\Module\Cron;
66+
67+
use \Psr\Log\LoggerInterface;
68+
69+
class CronLogger
70+
{
71+
protected $logger;
72+
73+
public function __construct(LoggerInterface $logger) {
74+
$this->logger = $logger;
75+
}
76+
77+
public function execute() {
78+
$this->logger->info('Cron job has executed successfully!');
79+
return $this;
80+
}
81+
}
82+
```
83+
84+
In this class:
85+
86+
The `LoggerInterface` is used to log messages. The `execute()` method logs a message when the cron job runs
87+
successfully.
88+
89+
<a href="#executing-a-cron-job"></a>
90+
## Executing a Cron Job
91+
92+
To execute all Magento cron jobs, you run the following command in the terminal:
93+
94+
```bash
95+
php bin/magento cron:run
96+
```
97+
98+
This command will execute all cron jobs that are scheduled to run at the time the command is executed.
99+
100+
<a href="#viewing-and-managing-cron-tasks"></a>
101+
## Viewing and Managing Cron Tasks
102+
103+
To view a list of all scheduled cron jobs and their status, you can use the following command:
104+
105+
```bash
106+
php bin/magento cron:status
107+
```
108+
109+
This command will display a table containing information about each cron job, including the job code, status, created
110+
date, scheduled date, executed date, and finished date.
111+
112+
If you need to remove a specific job from the cron schedule, you can do so with the following command:
113+
114+
```bash
115+
php bin/magento cron:remove <job_code>
116+
```
117+
118+
Replace `<job_code>` with the code of the job you wish to remove.
119+
120+
<a href="#cron-groups"></a>
121+
## Cron Groups
122+
123+
Magento 2 uses cron groups to manage related tasks together. A cron group is a set of cron jobs that are managed as a
124+
unit. All cron jobs in a group will run in the same process to ensure the resources are effectively used.
125+
126+
<a href="#defining-a-cron-group"></a>
127+
### Defining a Cron Group
128+
129+
Cron groups are defined in the `crontab.xml` file in the same way as individual cron jobs. The `group id` attribute is
130+
used to define the group. Jobs within the same group are enclosed within the same `group` tags.
131+
132+
Here is an example of how to define a cron group:
133+
134+
```xml
135+
<?xml version="1.0"?>
136+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
137+
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
138+
<group id="my_cron_group">
139+
<job name="my_cronjob1" instance="Vendor\Module\Cron\Test1" method="execute">
140+
<schedule>* * * * *</schedule>
141+
</job>
142+
<job name="my_cronjob2" instance="Vendor\Module\Cron\Test2" method="execute">
143+
<schedule>* * * * *</schedule>
144+
</job>
145+
</group>
146+
</config>
147+
```
148+
149+
In this example, both `my_cronjob1` and `my_cronjob2` are part of `the my_cron_group group`.
150+
151+
<a href="#running-a-specific-cron-group"></a>
152+
### Running a Specific Cron Group
153+
154+
To run all jobs in a specific cron group, use the following command:
155+
156+
```bash
157+
php bin/magento cron:run --group="my_cron_group"
158+
```
159+
160+
This command will run all cron jobs in `the my_cron_group group`.
161+
162+
<a href="#benefits-of-using-cron-groups"></a>
163+
### Benefits of Using Cron Groups
164+
165+
Using cron groups provides a few benefits:
166+
167+
You can manage related cron jobs together, making your cron configuration easier to understand and maintain.
168+
You can run all jobs in a group simultaneously, which can lead to more efficient use of server resources.
169+
If an error occurs in one job, it won't affect the other jobs in the group.
170+
Remember, the effective management of cron jobs, including the use of cron groups, is vital for maintaining the
171+
performance and functionality of your Magento 2 store.
172+
173+
<a href="#best-practices-for-cron-jobs"></a>
174+
## Best Practices for Cron Jobs
175+
176+
- Always log the start, end, and any exceptions in your cron jobs. This will help in debugging issues later.
177+
- Always return $this at the end of your cron job method to ensure that the method chain isn't broken.
178+
- Don't overload your server with too many simultaneous cron jobs. Schedule your jobs efficiently to avoid high server
179+
load.
180+
- Keep the execution time of your cron jobs as short as possible. Long-running jobs can slow down the overall
181+
performance of your Magento store.

0 commit comments

Comments
 (0)