従来、スケジュールタスク機能を開発するたびにオンラインで crontab を操作して項目を追加する必要があったので、PHP を使って一元管理したい
簡単な構成で、テーブル [id, name, status, func, timer, last_time, created_at] を作成できます。
はすべての計画を立てることができます。タスクは単純なタスク クラスに抽象化され、crontab に設定された単一の入り口から均一にアクセスされるため、オンライン コードによるオンライン サーバー環境の変更の手間が軽減されます。?
?
次に、次のような機能の性質によっていくつかのタイプのタスクが分類される可能性があるため、ここにはいくつかの落とし穴があります。?
?
1。すぐに終了します。複数のインスタンスを同時に実行できます?
2. デーモン プロセスは、同時に 1 つのインスタンスのみ実行できます?
?
2 番目に必要なのは?Lock?
メカニズムですが、エラーや例外などによってプログラムがロック解除され、この種のタスクを再度開始できなくなるのを防ぐためでもあります。このタスクをすばやく終了するにはどうすればよいでしょうか?要件が変更されたときに便利です??
ロック メカニズムはタスク ID を介して実装されていると思いますか?。タスクが実行されるたびにロックを適用する必要があり、ロックはこの種のタスクには固定の使用量割り当てがあります。
使用量割り当ては、バッチの実行が完了するたびに 1 回消費する必要があります。割り当て量が 0 の場合は、再度申請する必要があります。システムからロックします。?
?
lock_id: $task_id?
lock_{$task_id}_quota: $quota??
?
ロックを再申請するたびに、再度ロックを申請する必要があります。タスク構成テーブル内のタスクの構成情報を読み取ります?
?
アプリケーションが失敗した場合 (- 1) 実行を閉じて、次の実行を待ちます。この方法でタスクを中止するには、次の 2 つのオプションがあります:?
1. 今回中止するには、その使用方法を設定するだけです。クォータを -1 にしますか?
2. 完全に無効にし、このタスクのステータスを無効にリセットし、使用量クォータを -1 にリセットします?
?
タスクの終了後、ロックを解除する必要があります。ロックの解放に失敗した場合、タスク インスタンスは生きているか? ロック クォータが 1 未満の場合、そのタスクは無効であると判断できますか?ロックを再申請するプロセス中に無効なロック検出メカニズムによって強制終了されました? ?
強制終了後に何か影響はありますか??
?
-------------?
上記は私の仮説です、アドバイスをお願いします?
?