有一些问题涉及这个问题,但没有一个问题可以解决我的问题。这是在PHP 7.1 docker容器中运行的Symfony 2.8应用程序。
当命令以cron身份运行时,绝对URL在电子邮件中使用localhost
。我在documentation here中尝试了两种建议 - 在命令本身上进行配置,在参数中进行全局配置。
一切正常,直到命令由cron运行 - 即使我手动运行相同的命令。例如,在主机上将以下内容运行到容器中会正确生成绝对URL:
docker-compose exec --user www-data application sh -c "cd /var/www/html && /usr/local/bin/php app/console my:command -e=stage"
但是我的cron正在恢复到localhost:
1-59/3 * * * * www-data cd /var/www/html && /usr/local/bin/php app/console my:command -e=stage
Cron在容器内运行。如果我以www-data
打入容器并运行:/usr/local/bin/php app/console my:command -e=stage
它也能正常运行,所以我不知道为什么它不能像crontab一样打球。
答案 0 :(得分:0)
cron无法使用环境变量。因此,命令和参数使用的BASE_DOMAIN
环境变量在由预定的cron任务运行时为null
。
要解决此问题,基本域作为参数传递给命令,主机在请求上下文中设置如下:
$context = $this->router->getContext();
$context->setHost($input->getArgument('host'));
然后更新cron以包含主机。