小ネタdigdagを利用していて時おり困ることの一つに、何らかのジョブ*1がハングなどで長時間実行されてしてしまい、ジョブのキューが溜まり後続のジョブが実行されない問題があります。ディレクティブを利用した、という内容です。ディレクティブとはslaディレクティブを使用することで、digdagのジョブが特定の時間を超えた、または経過した場合に特定の処理を実行したり、エラーを発生させることができます。ディレクティブで利用可能なオプションは、2019/10/12現在で以下の通りです。使い、終了時にfailさせるのか、現状隠しパラメタ的なアラート処理を実行するのかを指定できます。噛み砕くと以下のようになります。両方指定した場合は以下のエラーとなります、親切ですね。(config)slaディレクティブのサンプルslaディレクティブのサンプルを記載します。durationによる経過時間の超過を検知するサンプル以下の条件を満たすサンプルコードです。violationtimeによる終了時刻の超過を検知するサンプル以下の条件を満たすサンプルコードです。GitHubのissueに古橋さんが例を記載してくれています。以下は単純なshellを利用していますが、mailやhttpも利用とのことです。処理も動作していました。errorslaディレクティブを使用し、一定時間以上が経過したジョブを自動キャンセルするそして個人的にはこれが一番やりたかったことですが、slaディレクティブを使うことで、長時間実行されてしまうジョブをキャンセルすることが可能です。よるキャンセルが発生し、job3は実行されません。kill)する」ことができます。指定する意味はありません。行なっているようにSlackやメールなどの通知を行なっておくことをお勧めします。処理による検知に頼っている場合キャンセル発生を見逃してしまう可能性があるためです。killが有効で、job2までは実行されますが、job3、job4は実行されません。killは行われますが、job2が途中で中断されることはなく、digdagはjob2の終了を待ってしまいます。私の期待としては6秒を超えた時点でsh>実行中のプロセスに対してもkillシグナルを発行してもらいたいのですが、現状は待ち続けるようでした。このように特定の長時間化した処理をどうしても止めたい場合はdigdagの外部(OS上など)から強制停止を行う必要がありそうです。Error!!!!!まとめ以上、slaディレクティブを使った想定外に長時間実行してしまうジョブへの対策、でした。serverで管理するジョブがある時点から全停止してる?!」なんて悲劇が起きる前に仕込んでおきたいですね。参加してきましたS3のWebページリダイレクト機能を試す2020年の目標ALBとTargetGroup一式をTerraformにimportしてみる2019年の振り返り月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。