Php 使用nohup运行Laravel队列工作守护程序会导致PDOException“;一般错误:超过1205锁等待超时;

Php 使用nohup运行Laravel队列工作守护程序会导致PDOException“;一般错误:超过1205锁等待超时;,php,mysql,laravel,transactions,queue,Php,Mysql,Laravel,Transactions,Queue,我制作了一个Laravel应用程序,它使用队列系统(通过数据库)发送电子邮件。这些电子邮件是作业实例,大约每3分钟完成一次cron作业后,就会推送到队列中 如果我运行artisan命令 /path_to_php/7.1/bin/php artisan queue:work --queue=emails_1--tries=2 --daemon 在终端中,通过SSH,它开始处理作业并发送电子邮件。显然,我想运行这个命令并退出终端,而它仍然在运行,所以我使用了“nohup”方法 nohup /pat

我制作了一个Laravel应用程序,它使用队列系统(通过数据库)发送电子邮件。这些电子邮件是作业实例,大约每3分钟完成一次cron作业后,就会推送到队列中

如果我运行artisan命令

/path_to_php/7.1/bin/php artisan queue:work --queue=emails_1--tries=2 --daemon
在终端中,通过SSH,它开始处理作业并发送电子邮件。显然,我想运行这个命令并退出终端,而它仍然在运行,所以我使用了“nohup”方法

nohup /path_to_php/7.1/bin/php artisan queue:work --queue=emails_1--tries=2 --daemon > storage/logs/laravel.log &
运行此命令后,我得到一个PDO异常:

PDOException: SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction in ...
我对这个错误并不十分熟悉,因为我以前从未遇到过类似的情况,但是为什么我不能使用nohup运行queue work命令,但在没有nohup的情况下可以毫无问题地运行它呢?你知道为什么会这样吗?我用的是Laravel5.2


请开导我。非常感谢。

不要在生产中使用数据库队列驱动程序。当您有一个较大的队列时,尽量避免使用数据库队列驱动程序,建议您使用Redis之类的工具,它不会出现基于数据库的驱动程序所具有的死锁问题

您是否在Laravel Github上有其他信息:

复制人