Magento 2 is not able to work well without Cron Jobs configured properly.
It helps re-index your store, send emails, notify customers or any jobs defined by 3rd party extensions.
Checking catalog rule module from Magento 2 at vendor/magento/module-catalog-rule/etc/crontab.xml
, we can see a cron job defined as below
<config xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd"> <group id="default"> <job name="catalogrule_apply_all" instance="Magento\CatalogRule\Cron\DailyCatalogUpdate" method="execute"> <schedule>0 1 * * *</schedule> </job> </group> </config>
To run these jobs, we must config Linux crontab
crontab -l #to check current configured cron jobs crontab -e #to edit configuration for cron jobs
To enable cron job for magento 2, we firstly have to check where PHP CLI installed
which php #output can be /usr/bin/php
and then, adding these lines into crontab
* * * * * /usr/bin/php /path to magento2/bin/magento cron:run | grep -v "Ran jobs by schedule" >> /path to magento2/var/log/magento.cron.log * * * * * /usr/bin/php /path to magento2/update/cron.php >> /path to magento2/var/log/update.cron.log * * * * * /usr/bin/php /path to magento2/bin/magento setup:cron:run >> /path to magento2/var/log/setup.cron.log
After that, you will not see this error message anymore
You can also run a cron in command line according to this syntax
magento cron:run [--group="cron_group_name"]
I hope this help you to quickly resolve your cron job setup for Magento 2.
PS: I have ran into permission issue with this cron job setting, it is because php script runs as current linux user, not as www-data user, so it created cache files without write permission to www-data users.
Warning: file_put_contents(/magento2/var/cache//mage-tags/mage---aa0_DB_PDO_MYSQL_DDL): failed to open stream: Permission denied in /magento2/vendor/colinmollenhour/cache-backend-file/File.php on line 663
I had to update cron setting to fix that issue like this
* * * * * www-data /usr/bin/php /path to magento2/bin/magento cron:run | grep -v "Ran jobs by schedule" >> /path to magento2/var/log/magento.cron.log * * * * * www-data /usr/bin/php /path to magento2/update/cron.php >> /path to magento2/var/log/update.cron.log * * * * * www-data /usr/bin/php /path to magento2/bin/magento setup:cron:run >> /path to magento2/var/log/setup.cron.log
I suppose that you are using apache as webserver.
Save
Save