LoginSignup
6
4

More than 5 years have passed since last update.

Digdagのshオペレータで複数コマンド

Last updated at Posted at 2017-07-10

必要性

複数コマンドをDigdagサーバの同じ号機で実行したい

結論

案1 - 複数コマンドを一つの*.shに押し込み、それをshオペレータで実行する
案2 - 以下のように1つのshオペレータに「;」区切りでコマンドを複数書く

+task1:
  sh>: >-
    command1 param1 param2;
    command2 param1 param2

背景

困ったこと

Digdagサーバ1号機2号機でNFS共有しているディレクトリがある
そこにmkdirするタスクとそれを参照するタスクを作った(いずれもshオペレータ)
しかし後者のタスクでno such file or directoryになることがある

仮説

mkdirと参照が別号機から行われており、mkdir結果がNFS経由で相手号機に伝わるのが遅れているのではないか
(NFSの遅延というか、NFSをDigdagが追い越したというか)

別号機で行われていることの確認

NFSディレクトリに吐くように設定しているタスクログディレクトリを見てみた
圧縮ファイル名にタスク名とホスト名がついているので当該タスクがどちらの号機で実行されているのかがわかる
事象発生時、mkdirタスクと参照タスクは別号機から行われていた

対応策

同じshオペレータ内でmkdirと参照を両方行うことで同じ号機で行われるようにした

追記

案2の方法はドキュメントにないように思うが将来使えなくなったりするだろうか

タスクがどちらの号機で実行されたのかがdigdag logでわかると助かるのだが
(logback.xmlとかでログフォーマットを変更してホスト名を出したい)

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4