gpt4 book ai didi

mysql - Laravel Cron php_network_getaddresses : getaddrinfo failed

转载 作者:行者123 更新时间:2023-11-29 06:54:42 29 4
gpt4 key购买 nike

你好!

所以我在为 Laravel 调度设置 cron 作业时遇到了这个恼人的问题。为了理解这个问题,这里是项目架构:

  • 该项目是使用 docker 设置的(我们有一个 php 容器,并且mysql 和 nginx)
  • 网络应用程序基于 Laravel 5.3 构建

我们希望自动化一些任务,因此我们创建了 3 个命令,并将它们收集在时间表中以便每天运行它们,kernel.php 如下所示:

    protected $commands = [
'App\Console\Commands\IncompleteAccount',
'App\Console\Commands\TirageSoon',
'App\Console\Commands\WinzExpiration',
];

protected function schedule(Schedule $schedule)
{
$schedule->command('incompleteaccount:run')->everyFiveMinutes()->sendOutputTo(storage_path('logs/cron.log'));

$schedule->command('tiragesoon:run')->everyFiveMinutes()->sendOutputTo(storage_path('logs/cron.log'));

$schedule->command('winzExpire:run')->everyFiveMinutes()->sendOutputTo(storage_path('logs/cron.log'));
}

我们的 crontab 看起来像:

* * * * * php /var/www/artisan schedule:run >> /var/www/storage/logs/cron.log 2>&1

在日志文件中我们得到:

  [Illuminate\Database\QueryException]                                                                                                                                    
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (SQL: select * from `booking` where `created_at` > 2017-08-27 16:08:50)



[Doctrine\DBAL\Driver\PDOException]
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known



[PDOException]
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known



[PDOException]
PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known


No scheduled commands are ready to run.
No scheduled commands are ready to run.
No scheduled commands are ready to run.
No scheduled commands are ready to run.

最后 .env 文件如下所示:

APP_ENV=prod
APP_KEY=base64:gPDQqknmG9YSOMueb/Ii0xXWQvrzOPsVFVRHVIzXXD0=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://www.ourSite.com
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=ourDB
DB_USERNAME=homestead
DB_PASSWORD=secret

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file

此外,我可以从容器内部 ping 到 mysql,这是 docker compose 文件:

version: '2'

services:

volumes_source:
image: tianon/true
volumes:
- ${SRCDIR}:/var/www
- ${DATADIR}/data/uploads:/var/www/public/img/uploads




nginx:
image: nginx
volumes_from:
- volumes_source
volumes:
- ${SRCDIR}/dockers/etc/nginx/sites-enabled:/etc/nginx/sites-enabled
- ${SRCDIR}/dockers/etc/nginx/nginx.conf:/etc/nginx/nginx.conf
ports:
- "${HTTP_PORT}:80"
links:
- php:phpfpm

wait:
image: aanand/wait
links:
- mysql:mysql
### Workspace Utilities Container ###########################

php:
build: dockers/winsu
volumes_from:
- volumes_source
command: php-fpm7 -F
working_dir: /var/www
environment:
CONFIG_ENV: ${CONFIG_ENV}
entrypoint: /var/www/dockers/winsu/run.sh
volumes:
- ${SRCDIR}/dockers/winsu/crontab:/crontab.file
links:
- mysql:mysql
- wait:wait

### MySQL Container #########################################
mysql:
image: mysql
volumes_from:
- volumes_data
environment:
MYSQL_DATABASE: winsu
MYSQL_USER: homestead
MYSQL_PASSWORD: root
MYSQL_ROOT_PASSWORD: root

### Databases Data Container ################################

volumes_data:
image: tianon/true
volumes:
- ${DATADIR}/data/mysql:/var/lib/mysql
- ${DATADIR}/data/storage:/var/www/storage

到目前为止,这个问题已经困扰了三天了!如果您能提供帮助,我将不胜感激! 我已经看到了类似的问题,但没有任何效果!提前致谢:)

最佳答案

您的问题似乎与未拾取环境变量有关。当您在 cron 中运行命令时,有两件事是不同的

  • 当前工作目录
  • 环境变量

所以将你的命令更改为

* * * * * cd /var/www && /var/www/artisan schedule:run ...

并使用命令前的 X=Y 格式定义任何其他所需的变量

* * * * * cd /var/www && X=Y Z=A /var/www/artisan schedule:run ...

关于mysql - Laravel Cron php_network_getaddresses : getaddrinfo failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46079692/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com