ホームページ >バックエンド開発 >PHPチュートリアル >PHP スクリプトがハングアップしないようにするため、シェル スクリプトはデーモンの例として共有されます_PHP チュートリアル
数日前にデータリストの実行を開始しました。リストにはユーザー名、携帯電話番号の有無、メールアドレスの有無が必要ですが、ユーザーリストは 2,000 万人もいます。また、ユーザーが携帯電話番号を持っているかどうか、メールボックスがあるかどうかも、外部に公開された安全なインターフェイスを通じてユーザーが 1 つずつ要求する必要があり、その戻り値を分析することで知ることができます。
以下は私の解決策です:
1. 2000w リストを一時データテーブルに保存します
2. PHP プログラムを使用してテーブルから毎回 500 ユーザーを取得し、検出後に SQL 更新元レコードを生成します
3 . PHP プログラムが突然切断されるのを防ぐために、PHP がハングした場合はシェル スクリプトを使用して再起動します。これは、モバイル間の検出インターフェイスをデーモンとして使用するためです。電話とメールボックスが遅く、100万〜2,000万人のユーザーを2日間でテストしました。
計画の詳細:
1. ユーザーリストテーブル users を一時的に保存します。テーブル構造は次のとおりです:
3. デーモンとしてのシェルスクリプト
このシェルスクリプトを crontab に追加し、1 分ごとに実行します。このシェルスクリプトは、check_users.php のプロセス ID が存在するかどうかを検出します。 PHP スクリプトがまだ実行中であり、シェル スクリプトが存在しない場合は、PHP スクリプトが exit(0) を終了し、10,000 人のユーザーが終了したことを意味し、シェル スクリプトがスクリプトを開始します。そして、次の 1,000 ユーザー リストの検出に入ります。
上で述べたように、接続時に PHP スクリプトがデータベースに接続できない場合、PHP は常にそこにボールを保持し、終了できません。シェルスクリプトに時間検出を追加しました。PHP スクリプトのプロセスが存在する場合、それが予想した時間を超えた場合は、PHP スクリプトを強制終了して再起動します。
で始まるデータの場合、結果は次のようになります:
testalexlee,1,0,1
codejia.net,0,0,1
haohdouywaa21,1,1,1
9873aaa,0,1,1
adddwwwd876222,1,0 ,1
最後に: 上記のユーザーリストのデータは単なる例です。2,000 万のデータでは、検出インターフェースが比較的遅いため、時間がかかると予想されます。リクエストを受信した後にテーブルに接続します。テーブルを検索して戻ります。実際、最良の方法は、インターフェイスによって要求されたテーブルからリストを直接取得し、シェル コマンドを使用してそれを処理することで、結果がすぐに得られます。ただし、これは会社の場合であり、一部の場合はそうではありません。開けてください~~~