Daemon
デーモンは、ワークフローを定期的に実行するサービスです。シナリオと同様に、ワークフローエディタで自由に定義してすぐに動作させることができます。シナリオとは異なり、トランザクションサービスとは連携しません。トランザクション処理を定期的に動作させたい場合は、デーモンからシナリオやATOMを呼び出すことで実現できます。
デーモンが保有する属性
属性 | 概要 | 備考 |
---|---|---|
name |
デーモンの名前を指定します。 | ユニークである必要があります。 |
category |
デーモンのカテゴリを指定します。 | カテゴリはデーモンを分類するためのラベルですが、カテゴリと同一名称のConfigサービスを定義している場合、デーモンが呼び出されたときに自動的にデーモンの名前空間にインポートされます。 詳細については、Docs » 名前空間 » リファレンス » Scenarioにおけるプログラミングの章を参照してください。 |
execute count |
デーモンを繰返し実行する回数を指定します。 | デフォルトは-1 が設定され、デーモンが活性状態の間、定期間隔で無限に実行されます。 |
interval |
デーモンを実行する間隔を指定します。 | デフォルトは60秒 です。ここで指定した間隔は、デーモンの実行完了後からカウントダウンされます。 |
status |
デーモンのステータスを指定します。 | active を指定すると、デーモンは定期的に実行されます。inactive を指定すると、定期的な実行を停止します。 |
global_variables |
グローバル変数を指定します。 | デーモンでは複数のコマンドを配置できますが、コマンド間で使用される変数はここで宣言する必要があります。グローバル変数定義のセットを他のシナリオまたはデーモンと共有する場合は、VariableGroup サービスを使用できます。 |
コマンドの動作と記述方法は、シナリオと同じです。コマンドの詳細とフロー制御については、Docs » Scenario » シナリオ
を参考にしてください。
Note
デーモンは、マスターノードのマスタープロセスでのみ稼働します。従ってクラスタ環境で競合動作することはありません。
Daemonに関するトラブルシューティング
負荷増大による影響
負荷増大によりヘルスチェックエラーが発生したり、ScenarioPodがダウンするといった報告があります。
Daemonで実行するシナリオ処理の負荷増大(特にtransactionデータサイズ増加)や、SCPを用いたファイル転送などが原因の可能性があります。
対策として、Daemonで負荷のかかる処理を避ける、処理間隔を長くするなどの負荷軽減策を検討してください。
新規環境デプロイ時にDaemonがアクティブにならない
新規環境をデプロイした際に Daemon がアクティブにならない場合があります。
これはDaemonの定義ファイルでremainCount = 0
が設定されていると、Daemonはアクティブにならないといった仕様によるものです。
remainCountをNone
などの値に変更してください。
stg環境以降の仕様
stg以降の環境では仕様上、デプロイ時にDaemonが自動でアクティブ化されます。
自動アクティブ化を回避したい場合は、設定ファイルにactivateDaemonson:falseを追加してください。
Warning
v23.2LTS-patch20231225以前の不具合について
何らかの理由でサービスが一時停止した際、サービスの復帰後にDaemonの定期処理が停止する事象が確認されております。
本事象を避けるためには最新バージョンにアップデートしてください。
Deamonの再起動方法
Daemonを再起動するには、Scenarioのインタラクティブシェルで以下のコマンドを実行してください。
>>> from axis.boot.context import SystemContext↵
... c = SystemContext.getinstance()↵
... d = c.__daemon__↵
... d.shutdownall()↵
... ↵
↵
>>> print(Daemon.status())↵
... ↵
↵
{}
>>> await c.restart_daemon()↵
... ↵
↵
>>> print(Daemon.status())↵
... ↵
↵
{'Daemon1': <TimerHandle IOLoop._run_callback>, 'Daemon2': <TimerHandle IOLoop._run_callback>}
shutdownall()
、restart_daemon()
の代わりにshutdown(daemon_name)
、startup(daemon_name)
を使用し、特定のDaemonを操作することも可能です。