次のチュートリアルコラムでは、thinkphp-queue の問題を解決する方法を紹介します。必要としている友達のお役に立てれば幸いです!使用バージョン: TP5.1、thinkphp-queue 2.0
mysql タイムアウト切断の問題
構成ファイル
database.php切断と再接続の構成:
// 是否需要断线重连 'break_reconnect' => true, // 断线标识字符串 'break_match_str' => ['2006'],
構成後、別の構成がログに表示されますが、エラーが報告されます: PDO::prepare(): 60 バイトの送信が errno=32 で失敗しました パイプが壊れていますが、プログラムの実行結果には影響しません。切断して再接続すると、プログラムは次のエラーをスローするためです:...} catch (\PDOException $e) { if ($this->isBreak($e)) { return $this->close()->query($sql, $bind, $master, $pdo); } throw new PDOException($e, $this->config, $this->getLastsql());} catch (\Throwable $e) { if ($this->isBreak($e)) { return $this->close()->query($sql, $bind, $master, $pdo); } throw $e;} catch (\Exception $e) { if ($this->isBreak($e)) { return $this->close()->query($sql, $bind, $master, $pdo); } throw $e;}
Docker 環境でプロセスを監視する方法
2. 新しいコンテナを実行してキュー タスクを実行します (スーパーバイザなし、コンテナー自体はデーモンです)
3. 既存の PHP コンテナーでキュー タスクを直接実行します (コマンド ラインで -daemon オプションを使用します)
方法 1 スーパーバイザーの参照設定 ( /etc/supervisor/ conf.d、ファイルの名前は {file-name}.conf):
[program:my_queue_name]process_name=%(program_name)s_%(process_num)02d command=php /path/to/think queue:work --queue=your-queue-name --sleep=3 --daemon autostart=trueautorestart=truenumprocs=1user=root stopasgroup=truekillasgroup=trueredirect_stderr=truestdout_logfile=/path/to/your-queue.log
方法 2 新しいミラー参照構成を開きます (docker-compose.yml にサービスを追加します):
php-queue: container_name: queue image: docker_php-fpm73 restart: always command: php path/to/think queue:work --sleep=3 volumes: - ../project:/var/www/html - ./conf/php:/usr/local/etc/php - ./conf/php/conf.d:/usr/local/etc/php/conf.d - ./conf/supervisor:/etc/supervisor/conf.d networks: - mysql - nginx
方法 3 は少しハック的ですが、オンライン環境を大きく変えないようにするため、最終的に方法 3 を使用します (ホスト マシン上で動作する)。
起動:
docker exec -i php7 php /path/to/think queue:work --queue=my-queue-name --sleep=3 --daemon再起動:docker exec -i php7 php /path/to/think queue:restart
(再起動後、キュープロセスが消えていることがわかります)、再度開始します
キュープロセスの表示: ps -aux | grep queue
何らかの理由でプログラムが失敗する場合があり、大量のログが生成されます。ログを調整するのが最善です。一人で出てください。設定ファイルの先頭に追加します##ログ調整
use think\facade\Log;Log::init([ 'single' => 'queue', 'file_size' => 1024 * 1024 * 10, 'level' => ['error'],]);
queue-cli.logファイル#に出力されます## runtime
ディレクトリ。##
以上がthinkphp-queue の問題解決についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。