又一次被 docker 坑到。
问题现象
在 Magento 中批量上传产品信息后,新增的商品信息无法通过 Magento 的搜索功能被检索到。 猜测是批量上传功能,没有自动触发 ES 全文检索的索引功能。
手动解决方案
执行:
> bin/magento cron:run
Ran jobs by schedule.
然后,产品信息就能被搜索到了。
但是,这样操作太麻烦,总不能每次在浏览器后台上传成功之后,都去服务器上再敲一段命令行吧。
尝试通过服务器端的系统计划任务实现。
docker 中 magento 自动创建的计划任务失效
执行 magento 命令,创建计划任务:
> bin/magento cron:install
Crontab has been generated and saved
查看自动生成的 crontab 配置:
> crontab -l
#~ MAGENTO START f73db5f5dcf223372d4c9fab56bef0c1730eece898fad5cbee0c313b46b0dd1f
* * * * * /usr/local/bin/php /var/www/html/your_magento_project/bin/magento cron:run 2>&1 | grep -v "Ran jobs by schedule" >> /var/www/html/your_magento_project/var/log/magento.cron.log
#~ MAGENTO END f73db5f5dcf223372d4c9fab56bef0c1730eece898fad5cbee0c313b46b0dd1f
但是奇怪的是,虽然是配置的每分钟执行一次,但是从日志看,并没有被执行。
而我在 docker 容器内,将复制出来的命令,手动执行,是可以看到日志记录的。
Google 了一下,发现原来大部分 Docker 镜像,默认是不支持 crontab 的,需要手动安装。
于是,我想,干脆直接使用宿主机的 crontab 得了。
在宿主机中手动测试一下命令行
> which docker
/usr/bin/docker
执行
> /usr/bin/docker compose -f /var/your_docker_compose_dir/docker-compose.yml exec phpfpm82 php --version
PHP 8.2.21 (cli) (built: Jul 6 2024 01:39:16) (NTS)
那么,实际上就可以将之前 magento 自动创建的 crontab 配置,修改一下,改成宿主机的命令调用方式即可。
宿主机的 crontab 配置
* * * * * /usr/bin/docker compose -f /var/your_docker_compose_dir/docker-compose.yml exec phpfpm82 php /var/www/html/your_magento_project/bin/magento cron:run 2>&1 | grep -v "Ran jobs by schedule" >> /var/www/html/your_magento_project/var/log/magento.cron.log
然后查看日志文件,就能看到每分钟的执行记录了。
参考
- https://experienceleague.adobe.com/en/docs/commerce-operations/configuration-guide/cli/configure-cron-jobs
- https://experienceleague.adobe.com/zh-hans/docs/commerce-operations/configuration-guide/cli/configure-cron-jobs#create-or-remove-the-magento-crontab
- https://stackoverflow.com/questions/30905697/docker-compose-with-crontab
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式