別の Web/デスクトップ アプリケーションの有無にかかわらず、Web アプリケーションのスケジュールされたタスクを作成するためのさまざまなアプローチは何ですか?
11 に答える
Microsoft プラットフォームについて話している場合は、そのようなバッチ タスクを処理するために別の Windows サービスを常に開発します。
厄介なコードの重複を避けるために、Web アプリケーションで使用されているのと同じアセンブリをいつでも参照できます。
Jeff は Stack Overflow ブログでこれについて議論しました - https://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/
基本的に、Jeff は特定のタスクを呼び出すためのタイマーとして CacheItemRemovedCallback を使用することを提案しました。
個人的には、自動化されたタスクは、サービス、Windows のスケジュールされたタスク、または SQL Server のジョブとして処理されるべきだと考えています。
Linux では、cron をチェックアウトします。
Stack Overflow 自体が ApplicationCache の有効期限を使用して、バックグラウンド コードを間隔を置いて実行していると思います。
Linux ホストを使用している場合は、ほぼ確実にcronを使用しています。
JavaとSpring-クォーツを使用します。非常に素晴らしく、信頼性が高い-http://static.springframework.org/spring/docs/1.2.x/reference/scheduling.html
Linux では、cron ジョブ ( http://www.unixgeeks.org/security/newbie/unix/cron-1.html ) を使用してタスクをスケジュールできます。
wget や curl などの URL フェッチャーを使用して、HTTP GET 要求を作成します。
ユーザー/パスワードを知らずにタスクを実行できないように、URL を認証で保護します。
Windows のビルトイン タスク スケジューラは、このジョブに推奨されるツールだと思います。それには外部アプリケーションが必要です。
これはあなたが探しているものかもしれませんし、そうでないかもしれませんが、記事「ASP.NET を使用して Windows サービスをシミュレートし、スケジュールされたジョブを実行する」を読んでください。StackOverflow がこのメソッドを使用する可能性があるか、少なくともそれを使用することについて話されたと思います。
私が働いている場所で使用した非常に簡単な方法は次のとおりです。
- タスクを実行する Web サービス/Web メソッドを設定します。この Web サービスは、必要に応じてユーザー名/パスで保護できます。
- この Web サービスを呼び出すコンソール アプリを作成します。必要に応じて、コンソール アプリにパラメーターを送信させたり、コンソールまたは外部ログへの出力用に何らかのメトリックを取得させたりすることができます。
- 選択したタスク スケジューラでこの実行可能ファイルをスケジュールします。
きれいではありませんが、シンプルで信頼性があります。コンソール アプリは基本的に、アプリに作業を開始するよう指示するハートビートにすぎないため、アプリケーションとライブラリを共有する必要はありません。この方法論のもう 1 つの利点は、必要に応じて手動で開始するのがかなり簡単であることです。
wget や curl などの URL フェッチャーを使用して、HTTP GET 要求を作成します。
ユーザー/パスワードを知らずにタスクを実行できないように、URL を認証で保護します。
たとえば、php スクリプトを直接実行するように cron に指示することもできます。また、PHP ファイルにアクセス許可を設定して、他の人がアクセスできないようにすることもできますが、これらのユーティリティ スクリプトを Web アクセス可能なディレクトリに置かないようにすることもできます...
cron (Linux) やタスク スケジューラ (Windows) を使用するよりも簡単な方法があると思います。以下を使用して、これを Web アプリに組み込むことができます。
または、別のサードパーティ ライブラリをアプリケーションに統合したくない場合: (b) 起動時に、標準の Java 'java.util.Timer' クラスを使用してタスクを実行するスレッドを作成します。