必要性
複数コマンドを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とかでログフォーマットを変更してホスト名を出したい)