バックグラウンドでサーバー上で定期的なタスクを実行する
-
19-08-2019 - |
質問
Tomcat / Jettyサーバーで定期的なタスク(デーモンスレッドなど)を実行するための最良/最も簡単な方法は何ですか?スレッドを開始するにはどうすればよいですか?シンプルなメカニズムはありますか、それとも悪い考えですか?
解決
ServeletContextにjava.util.Timer(またはより良いのはScheduledExecutor)インスタンスを隠しておくことは問題なく、効果的です。サーブレットのinit()呼び出しで作成すると、すべてのサーブレットがTimerTasksを追加できます。
他のヒント
すべてをJava側に保持する場合は、クォーツをご覧ください。
cronジョブと同じ柔軟性で、ジョブのフェイルオーバーときめ細かな再パーティション化を処理します。
多くのシステムで機能する1つの汎用的な方法は、アプリに対して定期的なwgetを実行するcronジョブを作成することです。
tomcat / jettyに答えることはできませんが、PythonベースのWebアプリで同様のことをしました。
通常、必要な定期的なタスクを実行する別のアプリを実行するだけです。ウェブサイトとアプリの間に相互運用が必要な場合、その通信は何らかの種類のAPI(XML-RPC / unixソケットなどを使用)を介して、または適切な場合はデータベース層のみを介して行われます。
役立つこと。
cronジョブを使用したいが、開発システムへの管理アクセス権がない場合、次のコマンドを実行してユーザーcrontabを実行できます。
crontab -e
ほとんどのシステムではデフォルトでviが使用されますが、次の方法で選択したエディターに変更できます。
export EDITOR=/usr/local/bin/my_editor
次に、crontab -eコマンドを実行すると、エディターでcrontabファイルが起動します。保存すると、変更はシステムのcronにコミットされます。