如何在 Magento 2 中设置 Cron 定时任务

7天成为Magento系统架构师,现在开始学习Magento全栈开发!

《Magento2.X企业级开发实战》

要在 Magento 2 中创建 cron 作业,首先您需要登录到 ssh,然后输入以下命令 crontab -u -e。

例如:crontab -u magento_user -e。

您可以使用 crontab -l 查看当前的 Cron 作业。 要修复 Cron 作业或添加新作业,您可以使用 crontab -e,然后会弹出一个编辑器,允许您编辑该 Cron 作业。

使用命令编写 Cron 作业。

* * * * *  <path to php binary> <magento install dir>/bin/magento cron:run | grep -v "Ran jobs by schedule" >> <magento install dir>/var/log/magento.cron.log
* * * * *  <path to php binary> <magento install dir>/update/cron.php >> <magento install dir>/var/log/update.cron.log
* * * * *  <path to php binary> <magento install dir>/bin/magento setup:cron:run >> <magento install dir>/var/log/setup.cron.log

要在 Magento 2 中创建 cron 作业,首先您需要登录到 ssh,然后输入以下命令 crontab -u -e。

例如:crontab -u magento_user -e。

您可以使用 crontab -l 查看当前的 Cron 作业。要修复 Cron 作业或添加新作业,您可以使用 crontab -e,然后会弹出一个编辑器,允许您编辑该 Cron 作业。

使用命令编写 Cron 作业。

  • * * * * /bin/magento cron:run | grep -v "按计划运行作业" >> /var/log/magento.cron.log
  • * * * * /update/cron.php >> /var/log/update.cron.log
  • * * * * /bin/magento setup:cron:run >> /var/log/setup.cron.log
    其中:

是 PHP 二进制文件的绝对文件系统路径。

是你安装Magento软件的目录,例如:/var/www/html/magento2/

第一个命令 (magento cron:run) 重新索引索引器,发送自动电子邮件,生成站点地图,等等。通常它与 PHP 命令行 .ini 文件相关联。其他两个命令由组件管理器和系统升级使用。

例如:您将 Magento 安装在 /var/www/magento2 中,设置 cron 作业每 1 分钟运行一次,您可以按照如下操作。

*/1 * * * * php /var/www/html/magento2/bin/magento cron:run | grep -v "Ran jobs by schedule" >> /var/www/html/magento2/var/log/magento.cron.log
*/1 * * * * php /var/www/html/magento2/update/cron.php >> /var/www/html/magento2/var/log/update.cron.log
*/1 * * * * php /var/www/html/magento2/bin/magento setup:cron:run >> /var/www/html/magento2/var/log/setup.cron.log

To save it after all modification, click Esc then use :wq and enter. In case you don’t want save any changes as above you can use :q enter.

Setup cron jobs in Magento 2 admin

On the Magento Admin, follow the path of selection Store > Configuration > System > Cron.

展开组的 Cron 配置选项:索引和组的 Cron 配置选项:默认部分并完成所有信息,如下所示:

按保存配置。

保护 cron.php 以在浏览器中运行
您有两种保护 Magento 2 cron 的方法:使用 Apache 或 Nginx。

使用 Apache 保护 cron
创建密码文件
首先,您需要创建一个密码文件。 出于安全考虑,您不应将文件放在 Web 服务器的 docroot 下。 下面我们以将 cron 存储在新目录中为例:

以具有 root 权限的用户身份输入以下命令:

$ mkdir -p /usr/local/apache/password
$ htpasswd -c /usr/local/apache/password/passwords <username>

可以是 Web 服务器或其他用户。

按照屏幕上的提示为用户创建密码。

为了将另一个用户添加到您的密码文件中,请使用 root 权限编写以下命令:

$ htpasswd /usr/local/apache/password/passwords <username>

创建密码文件后,您可以选择添加用户来创建授权组,但这一步是可选的。 可以在此处找到该步骤的说明。

.htaccess 中的安全 cron
要保护 .htaccess 中的 cron,您应该按照以下步骤操作:

以 Magento 文件系统所有者的身份登录或切换到 Magento 服务器。
在文本编辑器中打开 /pub/.htaccess。
(因为 cron.php 位置在 pub 目录中,所以只编辑 .htaccess。)

案例 1:一个或多个用户的 Cron 访问。 将现有的 指令替换为以下内容:

<Files cron.php>

   AuthType Basic

   AuthName "Cron Authentication"

   AuthUserFile /usr/local/apache/password/passwords

   Require valid-user

</Files>

案例 2:组的 Cron 访问。 将现有的 指令替换为以下内容

<Files cron.php>

   AuthType Basic

   AuthName "Cron Authentication"

   AuthUserFile /usr/local/apache/password/passwords

   AuthGroupFile <path to optional group file>

   Require group <name>

</Files>

保存 .htaccess 编辑。
验证 cron 是否安全。
使用 Nginx 保护 cron
和Apache一样,访问pub/cron.php时也需要创建密码文件并修改Nginx配置以引用密码文件。 阅读以下资源以了解如何设置密码文件。

如何在 Ubuntu 14.04 (DigitalOcean) 上使用 Nginx 设置密码认证
使用 nginx 进行基本 HTTP 身份验证(howtoforge)
nginx.conf.sample 中的安全 cron
Magento 提供了一个开箱即用的优化示例 Nginx 配置文件。 您可以修改它以保护 cron。

将以下部分添加到您的 Magento nginx.sample.conf 文件中:

#Securing cron

location ~ cron\.php$ {

   auth_basic "Cron Authentication";

   auth_basic_user_file /etc/nginx/.htpasswd;

   try_files $uri =404;

   fastcgi_pass   fastcgi_backend;

   fastcgi_buffers 1024 4k;


   fastcgi_read_timeout 600s;

   fastcgi_connect_timeout 600s;


   fastcgi_index  index.php;

   fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

   include      fastcgi_params;

}

保存文件更改后,您可以使用以下命令重新启动 Nginx:

$  systemctl restart nginx

禁用 cron 作业
在某些情况下,您可能希望在完成维护任务和缓存管理之前手动禁用 cron 作业,以防止出现性能问题。 使用 ece-tools CLI 命令 cron:disable 禁用所有 Magento cron 作业并停止任何活动的 cron 进程。

禁用 cron 作业的步骤:

使用 SSH 登录到您的环境。
禁用 cron 作业并停止所有活动的 cron 进程。 命令如下:

php bin/magento cron:remove
如无特殊说明或标注,任何个人或组织,复制、转载、采集本站内容请注明:
本文来源于:【Magento中文网】,并添加本文地址链接。
如未按上述操作复制或转载,本站有权追究法律责任。
若本站内容侵犯了原著者的合法权益,可联系我们进行处理。