Linux crontab のスケジュールされたタスクに関連
次に、テキスト メッセージを送信するスケジュールされたタスクを実行したいと思います。
最小の crontab は数分でしか設定できず、テキスト メッセージはより速く送信する必要があるためです。 1 分間に 60 メッセージを送信させてみました。
データベース キュー テーブルからロックされていないアイテムを 60 個検索します。ループ処理中にフィールドが更新されるたびに、フィールドがロックされていることを意味します。一般に、テキスト メッセージの量は非常に少なく、すべて 1 分以内に実行されます。今日は突然大量のリクエストが発生し、1 分間に 60 個の未処理アイテムが処理され、crontab が次のリクエストを発行しました。一つずつ処理した後にロックがかかるため、同時実行性が発生します。 (このリクエストで処理されなかったテキスト メッセージの一部は、次のリクエストに含まれます)。その結果、テキスト メッセージが繰り返し送信されます。
これはずっと改善したいと思っていました。なぜなら、量がいつも比較的少なく、よく考えていなかったからです。
見つかった 60 個のアイテムを発行する前にすべてロックできるはずです。しかし、いつロックを解除するかが問題です。
サードパーティのキュー サービスを使用する:
テキスト メッセージをデータベースに保存する場合は、自動インクリメントされる ID を memcacheq に保存し、定期的に実行します。 (時間指定実行は機能しないようです。1 分に 1 回では遅すぎます。PHP を使用してデーモンとして無限ループを作成しますか? (休止時間を設定できます) 常に実行するとメモリを消費しますか?)
ウェブサイトについて知りたいのですが、普段どのようにテキスト メッセージを送信していますか?デーモンなしでは即座に送信することは不可能です。 。 。
-----解決策--------------------------------
何かトラブルを起こしているようですが?
シェル スクリプトを作成し、curl を使用して 1 秒に 1 回リクエストできます (リクエストが終了するまで待つことはできません。または、実行が完了するまで待ってから 1 秒待ってから次のリクエストを送信することもできます) )、ステップ サイズ(毎回送信される最大数)を設定し、毎回ステップ サイズと同じ数のテキスト メッセージを取得し、最初にロックしてから、次のリクエストが実行される場合でも、1 つずつ送信します。送信が完了していない場合、この部分は繰り返し送信されません。
------解決策------------------
ここではすべてを行うために JAVA を使用します。あなたが言ったように、デーモンプロセスを使用する必要があります。
Python も使用でき、
php をスクリプトとして作成することもできます。始める。
------解決策------------------contab は定期的に php プログラムを呼び出してテキスト メッセージを送信します