操作問い合わせ #3619
closedja_jobmain_remove_oldjob() 実行時間の変更は可能でしょうか
Description
ご担当者様
お世話になっております。
便利なソフトウェアを公開していただき感謝しております。
毎日 9:00 に起動させるジョブの起動に失敗する事象が発生しました。
この時、Agentのログには、以下のような出力がされていました。
152952:20211222:090000.286 [INFO] In ja_jobmain_remove_oldjob() delete jobid = 170478 152952:20211222:090000.304 [INFO] In ja_jobmain_remove_oldjob() delete jobid = 170480 (以下、タイムスタンプと末尾の数字以外は同一の行が131行) 153700:20211222:090001.867 [INFO] In ja_agent_begin() jobid: 193089, method: 0 152952:20211222:090001.867 [INFO] In ja_jobmain_remove_oldjob() delete jobid = 171393 153700:20211222:090001.883 [ERROR] query failed: [BEGIN IMMEDIATE;] error [cannot start a transaction within a transaction] 152952:20211222:090001.899 [INFO] In ja_jobmain_remove_oldjob() delete jobid = 171339 (同 80行) 153700:20211222:090002.913 [ERROR] query failed: [BEGIN IMMEDIATE;] error [cannot start a transaction within a transaction] (くりかえし)
Job Arranger Agent が内部的に自動実行する「古いジョブの削除処理」が大量に走ったことで、
9:00を指定したジョブネットの起動のための管理情報書き込みに失敗したのではないかと推測しました。
なお問題発生後、Agentを停止→jobarg_agentd.db* を削除→Agentを起動 にて、AgentのDBを再生成させたところ回復しました。
( #3224-5 を参考にしました)
このジョブは業務的には9:00-18:00の毎時00,15,30,45分に起動させたいのですが、再発可能性を軽減させる策として、9:00の起動のみを9:01に変えました。
しかしこれはあくまで「逃げ」の対処であって、削除処理が1分で終わる保証もないですし、できれば本来の9:00に起動したいです。
当システムでは、メンテナンス的なジョブを実施するための時間は2:00~5:00の間で1時間以上確保できます。
ここで質問です。
(1) 「ja_jobmain_remove_oldjob」は Job Arranger が自動的に実施する(ユーザ側で設定したものではない)処理で間違いないでしょうか。
(2) 上記処理の実施時間を設定ファイル等で変更可能でしょうか。
(3) その他、ジョブが起動できない現象の回避・緩和策が考えられますでしょうか。
Agentのログを添付します。
(Serverのログは、既に削除されており採取できませんでした)
システム環境は以下の通りです。
※同居させているZabbixが他システムと共通であり、これ以上バージョンを上げられない状況です。
Server
OS: Red Hat Enterprise Linux 6系(詳細バージョン不明)
Zabbix: 2.2.9
DB: MySQL 5.1.73
Job Arranger Server: 3.4
Agent
OS: Windows Server 2016 Standard x64
Job Arranger Agent: 3.4.1
お忙しいところ恐れ入りますが、ご回答の程宜しくお願い致します。
Files
Updated by 保守サポート 担当 almost 3 years ago
ジョブアレンジャーのご利用ありがとうございます。
また、丁寧な状況説明とログ提供も有難うございます。
(1) 「ja_jobmain_remove_oldjob」は Job Arranger が自動的に実施する(ユーザ側で設定したものではない)処理で間違いないでしょうか。
その通りです。JobAgentでジョブ制御に使用しているSQLiteDBに残っている処理済みの古いデータを削除しています。
(2) 上記処理の実施時間を設定ファイル等で変更可能でしょうか。
可能です。jobarg_agentd.confの設定「JaBackupTime」で実行時間を指定できます。
https://www.jobarranger.info/document/doku.php?id=3.2:install:agent:windows:02agent-conf_win
バージョン3.2で追加された機能で、SQLiteDBのバックアップと削除処理を同時に行いますので
「バックアップ時刻」とHPでは記しています。
https://www.jobarranger.info/jaz/jaz_release_note.html#side320t
(3) その他、ジョブが起動できない現象の回避・緩和策が考えられますでしょうか。
#3546 に本エラーについて原因、回避策等について回答しておりますので、ご参照ください。
#3546 のジョブフローのように同一ホストで並列で多数のジョブが一斉起動となる場合に起きる可能性が高いと認識しています。
フロー構成で直列、時間ずらし等も考慮しますと回避につながります。
最新バージョンでは、バックアップ処理の別プロセス化、SQLiteDBリプレースによるAgent処理性能改善など機能アップと多くの改定がされております。
バージョンアップを是非ご検討ください。サポート契約ではZabbixも合わせたバージョンアップのサポートも提供いたしますので。
何卒宜しくお願い致します。
Updated by Anonymous almost 3 years ago
ご担当者様
チケットを起票した者です。ご回答ありがとうございました。
(2) 上記処理の実施時間を設定ファイル等で変更可能でしょうか。
可能です。jobarg_agentd.confの設定「JaBackupTime」で実行時間を指定できます。
ご案内ありがとうございます。上記理解できておりませんでした。
マニュアルに従って設定を変更したところ、希望通りの設定になりましたので、以下に記載しておきます。
「JaBackupTime」「JaBackupRunTime」ともに初期値の24のままでしたので、
「JaBackupTime」はそのまま 24 として、「JaBackupRunTime」を 20 にしました。
その結果、サーバのシステム時間の20時に ja_jobmain_remove_oldjob() が起動しました。
※このサーバのタイムゾーン設定は+0900です。
時間が設定できることを知りましたので欲張って要望してしまいますが、分単位まで指定できると便利だと思いました。
(毎正時に業務ジョブを動かしたい要件はままありそうですので、メンテナンス系の処理は中途半端な時分に設定できると競合を回避できそうです)
問題は解決しましたので、本件はクローズをお願いします。
ありがとうございました。