如何设置 Magento2 的 cron job

参考文档:Configure and run cron

cron job 是什么

Magento 的一些功能要正常运行就必须要用到 cron job,它是一系列的定时任务,这些任务包括:

  • Catalog price rules
  • Newsletters
  • Generating Google sitemaps
  • Customer Alerts/Notifications (product price change, product back in stock)
  • Reindexing
  • Private sales (Magento EE only)
  • Automatic updating of currency rates
  • All Magento e-mails (including order confirmation and transactional)

官方建议以 Magento 文件所有者的身份运行 cron ,不要用root ,也不要用web server user (一般指 www-data)

UNIX 系统的计划任务是由crontab来执行的,通过他可以在固定的时间间隔执行指定的系统指令或shell script,当然包括 php 脚本。crontab 是一个记录某时刻执行某命令的文件。每个系统用户都有他自己的 crontab,crontab 会以他自己的所有者的身份运行命令。所以官方推荐你用 magento 文件所有者的身份运行cron,就是因为需要以该身份运行 magento 命令。

cron job 是依赖 crontab 去完成功能的,cron job 是 magento 2的提供的定时任务,crontab 是系统的功能,强烈建议不要用 windows 系统作为生产环境,不然这一块会很麻烦的。

如何配置 cron job

  1. 找到 php 的目录查看php 的目录,如下命令即可:
     which php
    

    返回结果例如:

     /usr/bin/php
    
  2. 创建 cron job我们先以 magento 文件所有者的身份登陆进去,博主是 ThankIT
     crontab -e
    

    第一次要你选择编辑器,照着指示做就成。然后我们会编辑一个文件,添加如下类似的代码在文件末尾,最后保存一下退出。

    * * * * * <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
    

    | grep -v "Ran jobs by schedule"用来从日志中筛选出相关记录,方便查看。
    * * * * * 表示每分钟,官方推荐时间间隔。
    第一条命令(magento cron:run)负责重建索引,自动发邮件,生成sitemap 等日常工作,剩下两个是Component Manager 和系统升级使用的。
    博主的crontab 是这样的:

    * * * * * /usr/bin/php /home/ThankIT/www/demo/M210/bin/magento cron:run | grep -v "Ran jobs by schedule" >> /home/ThankIT/www/demo/M210/var/log/magento.cron.log
    * * * * * /usr/bin/php /home/ThankIT/www/demo/M210/update/cron.php >> /home/ThankIT/www/demo/M210/var/log/update.cron.log
    * * * * * /usr/bin/php /home/ThankIT/www/demo/M210/bin/magento setup:cron:run >> /var/www/magento2/var/log/setup.cron.log
    
  3. 怎么判断 cron job 成功运行了
    判断方法应该有很多吧,其中博主认为比较简单的是去查看一下数据库的cron_schedule表,如果有记录说明成功了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注