Task Spooler を試した
内山 雄司 (@y__uti)
2016-09-13 社内勉強会
自己紹介
内山 雄司 (@y__uti)
◦ http://y-uti.hatenablog.jp/ (phpusers-ja)
仕事
◦ 受託開発の会社 (株式会社ピコラボ) でプログラマをしています
興味
◦ プログラミング言語処理系
◦ 機械学習
2016-09-13 社内勉強会 2
Task Spooler
http://vicerveza.homeunix.net/~viric/soft/ts/
2016-09-13 社内勉強会 3
Task Spooler とは?
簡易ジョブ管理システム的なもの
Task Spooler ができること
◦ 最大同時実行数を設定してプロセスを並列実行する
◦ プロセスの状態や実行結果を管理する
◦ プロセスの実行条件 (依存関係) を指定する
Task Spooler ではできないこと
◦ 複雑なことは概ねできない
◦ ジョブの実行時刻を指定するとか (cron じゃないから)
◦ 異常終了したら通知するとか
◦ トリッキーなジョブを仕掛ければできるかもしれないが・・・
2016-09-13 社内勉強会 4
何をしてくれるのか
最大同時実行数を設定してプロセスを並列実行する
2016-09-13 社内勉強会 5
実行待ち 実行中 実行済み
何をしてくれるのか
最大同時実行数を設定してプロセスを並列実行する
2016-09-13 社内勉強会 6
実行待ち 実行中 実行済み
終わった!
何をしてくれるのか
最大同時実行数を設定してプロセスを並列実行する
2016-09-13 社内勉強会 7
実行待ち 実行中 実行済み
次!
インストール
ソースコードを取得してビルドする
2016-09-13 社内勉強会 8
$ wget http://vicerveza.homeunix.net/~viric/soft/ts/ts-
0.7.6.tar.gz
$ tar xf ts-0.7.6.tar.gz
$ cd ts-0.7.6
$ make
$ make PREFIX=.. install
◦ インストールされるのは以下の 2 ファイル
◦ $PREFIX/bin/ts
◦ $PREFIX/share/man/man1/ts.1
◦ ちなみに GPL version 2.0
基本的な使い方 [1/2]
最大同時実行数を設定する
2016-09-13 社内勉強会 9
$ ts -S 4
◦ 4 プロセスまで同時実行
確認
$ ts
ID State Output E-Level Times(r/u/s) Command [run=0/4]
基本的な使い方 [2/2]
ジョブをキューに登録する
2016-09-13 社内勉強会 10
$ for i in $(seq 1 10); do ts sleep $i; done
0
1
2
3
4
5
6
7
8
9
◦ i = 1 ~ 10 として「$i 秒 sleep する」ジョブを登録した
実行の様子
キューの状態を確認する
実行直後
2016-09-13 社内勉強会 11
$ ts
ID State Output E-Level Times(r/u/s) Command [run=4/4]
0 running /tmp/ts-out.sWEDhd sleep 1
1 running /tmp/ts-out.2FZb9f sleep 2
2 running /tmp/ts-out.g4nEOg sleep 3
3 running /tmp/ts-out.E7hDyg sleep 4
4 queued (file) sleep 5
5 queued (file) sleep 6
6 queued (file) sleep 7
7 queued (file) sleep 8
8 queued (file) sleep 9
9 queued (file) sleep 10
実行の様子
キューの状態を確認する
1秒後
2016-09-13 社内勉強会 12
$ ts
ID State Output E-Level Times(r/u/s) Command [run=4/4]
1 running /tmp/ts-out.2FZb9f sleep 2
2 running /tmp/ts-out.g4nEOg sleep 3
3 running /tmp/ts-out.E7hDyg sleep 4
4 running /tmp/ts-out.iNqnyi sleep 5
5 queued (file) sleep 6
6 queued (file) sleep 7
7 queued (file) sleep 8
8 queued (file) sleep 9
9 queued (file) sleep 10
0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1
◦ 一秒ごとに ts コマンドを実行しています
◦ 自動更新されるわけではない
実行の様子
キューの状態を確認する
2秒後
2016-09-13 社内勉強会 13
$ ts
ID State Output E-Level Times(r/u/s) Command [run=4/4]
2 running /tmp/ts-out.g4nEOg sleep 3
3 running /tmp/ts-out.E7hDyg sleep 4
4 running /tmp/ts-out.iNqnyi sleep 5
5 running /tmp/ts-out.zLJ4Ci sleep 6
6 queued (file) sleep 7
7 queued (file) sleep 8
8 queued (file) sleep 9
9 queued (file) sleep 10
0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1
1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2
◦ 一秒ごとに ts コマンドを実行しています
◦ 自動更新されるわけではない
実行の様子
キューの状態を確認する
3秒後
2016-09-13 社内勉強会 14
$ ts
ID State Output E-Level Times(r/u/s) Command [run=4/4]
3 running /tmp/ts-out.E7hDyg sleep 4
4 running /tmp/ts-out.iNqnyi sleep 5
5 running /tmp/ts-out.zLJ4Ci sleep 6
6 running /tmp/ts-out.kjWcqk sleep 7
7 queued (file) sleep 8
8 queued (file) sleep 9
9 queued (file) sleep 10
0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1
1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2
2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3
◦ 一秒ごとに ts コマンドを実行しています
◦ 自動更新されるわけではない
実行の様子
キューの状態を確認する
・・・
2016-09-13 社内勉強会 15
$ ts
ID State Output E-Level Times(r/u/s) Command [run=4/4]
4 running /tmp/ts-out.iNqnyi sleep 5
5 running /tmp/ts-out.zLJ4Ci sleep 6
6 running /tmp/ts-out.kjWcqk sleep 7
7 running /tmp/ts-out.i9BXum sleep 8
8 queued (file) sleep 9
9 queued (file) sleep 10
0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1
1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2
2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3
3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4
◦ 一秒ごとに ts コマンドを実行しています
◦ 自動更新されるわけではない
実行の様子
キューの状態を確認する
・・・
2016-09-13 社内勉強会 16
$ ts
ID State Output E-Level Times(r/u/s) Command [run=4/4]
5 running /tmp/ts-out.zLJ4Ci sleep 6
6 running /tmp/ts-out.kjWcqk sleep 7
7 running /tmp/ts-out.i9BXum sleep 8
8 running /tmp/ts-out.AWi5Dq sleep 9
9 queued (file) sleep 10
0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1
1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2
2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3
3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4
4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5
◦ 一秒ごとに ts コマンドを実行しています
◦ 自動更新されるわけではない
実行の様子
キューの状態を確認する
・・・
2016-09-13 社内勉強会 17
$ ts
ID State Output E-Level Times(r/u/s) Command [run=4/4]
6 running /tmp/ts-out.kjWcqk sleep 7
7 running /tmp/ts-out.i9BXum sleep 8
8 running /tmp/ts-out.AWi5Dq sleep 9
9 running /tmp/ts-out.kVAX0u sleep 10
0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1
1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2
2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3
3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4
4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5
5 finished /tmp/ts-out.zLJ4Ci 0 6.01/0.00/0.00 sleep 6
◦ 一秒ごとに ts コマンドを実行しています
◦ 自動更新されるわけではない
実行の様子
キューの状態を確認する
・・・
2016-09-13 社内勉強会 18
$ ts
ID State Output E-Level Times(r/u/s) Command [run=3/4]
7 running /tmp/ts-out.i9BXum sleep 8
8 running /tmp/ts-out.AWi5Dq sleep 9
9 running /tmp/ts-out.kVAX0u sleep 10
0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1
1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2
2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3
3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4
4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5
5 finished /tmp/ts-out.zLJ4Ci 0 6.01/0.00/0.00 sleep 6
6 finished /tmp/ts-out.kjWcqk 0 7.00/0.00/0.00 sleep 7
◦ 一秒ごとに ts コマンドを実行しています
◦ 自動更新されるわけではない
実行の様子
キューの状態を確認する
・・・
2016-09-13 社内勉強会 19
$ ts
ID State Output E-Level Times(r/u/s) Command [run=2/4]
8 running /tmp/ts-out.AWi5Dq sleep 9
9 running /tmp/ts-out.kVAX0u sleep 10
0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1
1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2
2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3
3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4
4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5
5 finished /tmp/ts-out.zLJ4Ci 0 6.01/0.00/0.00 sleep 6
6 finished /tmp/ts-out.kjWcqk 0 7.00/0.00/0.00 sleep 7
7 finished /tmp/ts-out.i9BXum 0 8.01/0.00/0.00 sleep 8
◦ 一秒ごとに ts コマンドを実行しています
◦ 自動更新されるわけではない
実行の様子
キューの状態を確認する
・・・
2016-09-13 社内勉強会 20
$ ts
ID State Output E-Level Times(r/u/s) Command [run=1/4]
9 running /tmp/ts-out.kVAX0u sleep 10
0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1
1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2
2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3
3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4
4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5
5 finished /tmp/ts-out.zLJ4Ci 0 6.01/0.00/0.00 sleep 6
6 finished /tmp/ts-out.kjWcqk 0 7.00/0.00/0.00 sleep 7
7 finished /tmp/ts-out.i9BXum 0 8.01/0.00/0.00 sleep 8
8 finished /tmp/ts-out.AWi5Dq 0 9.00/0.00/0.00 sleep 9
◦ 一秒ごとに ts コマンドを実行しています
◦ 自動更新されるわけではない
実行の様子
キューの状態を確認する
終わり
2016-09-13 社内勉強会 21
$ ts
ID State Output E-Level Times(r/u/s) Command [run=0/4]
0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1
1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2
2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3
3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4
4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5
5 finished /tmp/ts-out.zLJ4Ci 0 6.01/0.00/0.00 sleep 6
6 finished /tmp/ts-out.kjWcqk 0 7.00/0.00/0.00 sleep 7
7 finished /tmp/ts-out.i9BXum 0 8.01/0.00/0.00 sleep 8
8 finished /tmp/ts-out.AWi5Dq 0 9.00/0.00/0.00 sleep 9
9 finished /tmp/ts-out.kVAX0u 0 10.00/0.00/0.00 sleep 10
◦ 一秒ごとに ts コマンドを実行しています
◦ 自動更新されるわけではない
ts のオプション [1/3]
ジョブの情報を確認する
2016-09-13 社内勉強会 22
オプション 意味
-t [id] 指定されたジョブの出力を tail -f する
-c [id] 指定されたジョブの出力を cat する
-p [id] 指定されたジョブのプロセス ID を表示する
-o [id] 指定されたジョブの出力ファイル名を表示する
-i [id] 指定されたジョブの情報を表示する
-s [id] 指定されたジョブの状態を表示する
ts -i [id]
指定されたジョブの情報を表示する
2016-09-13 社内勉強会 23
$ ts -i 3
Exit status: died with exit code 0
Command: sleep 4
Slots required: 1
Enqueue time: Mon Sep 12 22:07:56 2016
Start time: Mon Sep 12 22:07:56 2016
End time: Mon Sep 12 22:08:00 2016
Time run: 4.004059s
ts のオプション [2/3]
ジョブの実行を制御する
2016-09-13 社内勉強会 24
オプション 意味
-r [id] 指定されたジョブをキューから取り除く
-w [id] 指定されたジョブが終わるまで待つ
-k [id] 指定されたジョブを kill する (SIGTERM)
-u [id] 指定されたジョブをキューの先頭に移動する
-U <id>-<id> 指定された二つのジョブの位置を入れ替える
ts のオプション [3/3]
ジョブを登録するときのオプション
2016-09-13 社内勉強会 25
オプション 意味
-n ジョブの出力をファイルに保存しない
-E ジョブの標準出力と標準エラーを分けて出力する
-g ジョブの出力を gzip する
-f バックグラウンドで fork しない (未確認)
-m ジョブの出力をメールで送信する (未確認)
-d 直前のジョブが正常終了したときだけ実行する
-D <id> 指定されたジョブが正常終了したときだけ実行する
-L <lab> ジョブに名前を付ける
-N <num> ジョブが使うスロット数を指定する
ts -D [id]
指定されたジョブが正常終了したときだけ実行する
2016-09-13 社内勉強会 26
$ ts -S 2
$ ts sleep 20
0
$ ts sleep 10
1
$ ts -D 0 sleep 5
2
$ ts sleep 5
3
◦ ID = 2 のジョブは ID = 0 のジョブが正常終了したら実行が始まる
実行の様子
実行直後
2016-09-13 社内勉強会 27
$ ts
ID State Output E-Level Times(r/u/s) Command [run=2/2]
0 running /tmp/ts-out.flebwV sleep 20
1 running /tmp/ts-out.RGTygW sleep 10
2 queued (file) [0]&& sleep 5
3 queued (file) sleep 5
実行の様子
10 秒後
2016-09-13 社内勉強会 28
$ ts
ID State Output E-Level Times(r/u/s) Command [run=2/2]
0 running /tmp/ts-out.flebwV sleep 20
2 queued (file) [0]&& sleep 5
3 running /tmp/ts-out.4MUpNi sleep 5
1 finished /tmp/ts-out.RGTygW 0 10.01/0.00/0.00 sleep 10
◦ ID = 1 のジョブが終了する
◦ ID = 2 のジョブは ID = 0 を待っているので実行が開始されない
◦ ID = 3 のジョブの実行が開始される
実行の様子
15 秒後
2016-09-13 社内勉強会 29
$ ts
ID State Output E-Level Times(r/u/s) Command [run=1/2]
0 running /tmp/ts-out.flebwV sleep 20
2 queued (file) [0]&& sleep 5
1 finished /tmp/ts-out.RGTygW 0 10.01/0.00/0.00 sleep 10
3 finished /tmp/ts-out.4MUpNi 0 5.01/0.00/0.00 sleep 5
◦ ID = 3 のジョブが終了する
◦ ID = 2 のジョブは ID = 0 を待っているので実行が開始されない
実行の様子
20 秒後
2016-09-13 社内勉強会 30
$ ts
ID State Output E-Level Times(r/u/s) Command [run=1/2]
2 running /tmp/ts-out.c9eVnz [0]&& sleep 5
1 finished /tmp/ts-out.RGTygW 0 10.01/0.00/0.00 sleep 10
3 finished /tmp/ts-out.4MUpNi 0 5.01/0.00/0.00 sleep 5
0 finished /tmp/ts-out.flebwV 0 20.01/0.00/0.00 sleep 20
◦ ID = 0 のジョブが終了する
◦ ID = 2 のジョブの実行が開始される
実行の様子
25 秒後
2016-09-13 社内勉強会 31
$ ts
ID State Output E-Level Times(r/u/s) Command [run=0/2]
1 finished /tmp/ts-out.RGTygW 0 10.01/0.00/0.00 sleep 10
3 finished /tmp/ts-out.4MUpNi 0 5.01/0.00/0.00 sleep 5
0 finished /tmp/ts-out.flebwV 0 20.01/0.00/0.00 sleep 20
2 finished /tmp/ts-out.c9eVnz 0 5.01/0.00/0.00 [0]&& sleep 5
◦ ID = 2 のジョブが終了する
ところで
-D って複数指定できるの?
◦ できない!
◦ 右図のような制御ができない
プログラムを修正すればできる
◦ 実際できた
◦ -D の値を int で持っているのを
配列に変更するだけ
2016-09-13 社内勉強会 32
ここができない!
ts の後片付け
バックグラウンドの ts サーバプロセスを終了する
2016-09-13 社内勉強会 33
$ ts -K
◦ 必要になったとき (ジョブを登録したとき等) に自動起動している
おわり
詳細は ts -h
説明していないオプションもあるよ
2016-09-13 社内勉強会 34

Task Spooler を試した

  • 1.
    Task Spooler を試した 内山雄司 (@y__uti) 2016-09-13 社内勉強会
  • 2.
    自己紹介 内山 雄司 (@y__uti) ◦http://y-uti.hatenablog.jp/ (phpusers-ja) 仕事 ◦ 受託開発の会社 (株式会社ピコラボ) でプログラマをしています 興味 ◦ プログラミング言語処理系 ◦ 機械学習 2016-09-13 社内勉強会 2
  • 3.
  • 4.
    Task Spooler とは? 簡易ジョブ管理システム的なもの TaskSpooler ができること ◦ 最大同時実行数を設定してプロセスを並列実行する ◦ プロセスの状態や実行結果を管理する ◦ プロセスの実行条件 (依存関係) を指定する Task Spooler ではできないこと ◦ 複雑なことは概ねできない ◦ ジョブの実行時刻を指定するとか (cron じゃないから) ◦ 異常終了したら通知するとか ◦ トリッキーなジョブを仕掛ければできるかもしれないが・・・ 2016-09-13 社内勉強会 4
  • 5.
  • 6.
  • 7.
  • 8.
    インストール ソースコードを取得してビルドする 2016-09-13 社内勉強会 8 $wget http://vicerveza.homeunix.net/~viric/soft/ts/ts- 0.7.6.tar.gz $ tar xf ts-0.7.6.tar.gz $ cd ts-0.7.6 $ make $ make PREFIX=.. install ◦ インストールされるのは以下の 2 ファイル ◦ $PREFIX/bin/ts ◦ $PREFIX/share/man/man1/ts.1 ◦ ちなみに GPL version 2.0
  • 9.
    基本的な使い方 [1/2] 最大同時実行数を設定する 2016-09-13 社内勉強会9 $ ts -S 4 ◦ 4 プロセスまで同時実行 確認 $ ts ID State Output E-Level Times(r/u/s) Command [run=0/4]
  • 10.
    基本的な使い方 [2/2] ジョブをキューに登録する 2016-09-13 社内勉強会10 $ for i in $(seq 1 10); do ts sleep $i; done 0 1 2 3 4 5 6 7 8 9 ◦ i = 1 ~ 10 として「$i 秒 sleep する」ジョブを登録した
  • 11.
    実行の様子 キューの状態を確認する 実行直後 2016-09-13 社内勉強会 11 $ts ID State Output E-Level Times(r/u/s) Command [run=4/4] 0 running /tmp/ts-out.sWEDhd sleep 1 1 running /tmp/ts-out.2FZb9f sleep 2 2 running /tmp/ts-out.g4nEOg sleep 3 3 running /tmp/ts-out.E7hDyg sleep 4 4 queued (file) sleep 5 5 queued (file) sleep 6 6 queued (file) sleep 7 7 queued (file) sleep 8 8 queued (file) sleep 9 9 queued (file) sleep 10
  • 12.
    実行の様子 キューの状態を確認する 1秒後 2016-09-13 社内勉強会 12 $ts ID State Output E-Level Times(r/u/s) Command [run=4/4] 1 running /tmp/ts-out.2FZb9f sleep 2 2 running /tmp/ts-out.g4nEOg sleep 3 3 running /tmp/ts-out.E7hDyg sleep 4 4 running /tmp/ts-out.iNqnyi sleep 5 5 queued (file) sleep 6 6 queued (file) sleep 7 7 queued (file) sleep 8 8 queued (file) sleep 9 9 queued (file) sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  • 13.
    実行の様子 キューの状態を確認する 2秒後 2016-09-13 社内勉強会 13 $ts ID State Output E-Level Times(r/u/s) Command [run=4/4] 2 running /tmp/ts-out.g4nEOg sleep 3 3 running /tmp/ts-out.E7hDyg sleep 4 4 running /tmp/ts-out.iNqnyi sleep 5 5 running /tmp/ts-out.zLJ4Ci sleep 6 6 queued (file) sleep 7 7 queued (file) sleep 8 8 queued (file) sleep 9 9 queued (file) sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  • 14.
    実行の様子 キューの状態を確認する 3秒後 2016-09-13 社内勉強会 14 $ts ID State Output E-Level Times(r/u/s) Command [run=4/4] 3 running /tmp/ts-out.E7hDyg sleep 4 4 running /tmp/ts-out.iNqnyi sleep 5 5 running /tmp/ts-out.zLJ4Ci sleep 6 6 running /tmp/ts-out.kjWcqk sleep 7 7 queued (file) sleep 8 8 queued (file) sleep 9 9 queued (file) sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  • 15.
    実行の様子 キューの状態を確認する ・・・ 2016-09-13 社内勉強会 15 $ts ID State Output E-Level Times(r/u/s) Command [run=4/4] 4 running /tmp/ts-out.iNqnyi sleep 5 5 running /tmp/ts-out.zLJ4Ci sleep 6 6 running /tmp/ts-out.kjWcqk sleep 7 7 running /tmp/ts-out.i9BXum sleep 8 8 queued (file) sleep 9 9 queued (file) sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  • 16.
    実行の様子 キューの状態を確認する ・・・ 2016-09-13 社内勉強会 16 $ts ID State Output E-Level Times(r/u/s) Command [run=4/4] 5 running /tmp/ts-out.zLJ4Ci sleep 6 6 running /tmp/ts-out.kjWcqk sleep 7 7 running /tmp/ts-out.i9BXum sleep 8 8 running /tmp/ts-out.AWi5Dq sleep 9 9 queued (file) sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4 4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  • 17.
    実行の様子 キューの状態を確認する ・・・ 2016-09-13 社内勉強会 17 $ts ID State Output E-Level Times(r/u/s) Command [run=4/4] 6 running /tmp/ts-out.kjWcqk sleep 7 7 running /tmp/ts-out.i9BXum sleep 8 8 running /tmp/ts-out.AWi5Dq sleep 9 9 running /tmp/ts-out.kVAX0u sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4 4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5 5 finished /tmp/ts-out.zLJ4Ci 0 6.01/0.00/0.00 sleep 6 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  • 18.
    実行の様子 キューの状態を確認する ・・・ 2016-09-13 社内勉強会 18 $ts ID State Output E-Level Times(r/u/s) Command [run=3/4] 7 running /tmp/ts-out.i9BXum sleep 8 8 running /tmp/ts-out.AWi5Dq sleep 9 9 running /tmp/ts-out.kVAX0u sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4 4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5 5 finished /tmp/ts-out.zLJ4Ci 0 6.01/0.00/0.00 sleep 6 6 finished /tmp/ts-out.kjWcqk 0 7.00/0.00/0.00 sleep 7 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  • 19.
    実行の様子 キューの状態を確認する ・・・ 2016-09-13 社内勉強会 19 $ts ID State Output E-Level Times(r/u/s) Command [run=2/4] 8 running /tmp/ts-out.AWi5Dq sleep 9 9 running /tmp/ts-out.kVAX0u sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4 4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5 5 finished /tmp/ts-out.zLJ4Ci 0 6.01/0.00/0.00 sleep 6 6 finished /tmp/ts-out.kjWcqk 0 7.00/0.00/0.00 sleep 7 7 finished /tmp/ts-out.i9BXum 0 8.01/0.00/0.00 sleep 8 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  • 20.
    実行の様子 キューの状態を確認する ・・・ 2016-09-13 社内勉強会 20 $ts ID State Output E-Level Times(r/u/s) Command [run=1/4] 9 running /tmp/ts-out.kVAX0u sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4 4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5 5 finished /tmp/ts-out.zLJ4Ci 0 6.01/0.00/0.00 sleep 6 6 finished /tmp/ts-out.kjWcqk 0 7.00/0.00/0.00 sleep 7 7 finished /tmp/ts-out.i9BXum 0 8.01/0.00/0.00 sleep 8 8 finished /tmp/ts-out.AWi5Dq 0 9.00/0.00/0.00 sleep 9 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  • 21.
    実行の様子 キューの状態を確認する 終わり 2016-09-13 社内勉強会 21 $ts ID State Output E-Level Times(r/u/s) Command [run=0/4] 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4 4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5 5 finished /tmp/ts-out.zLJ4Ci 0 6.01/0.00/0.00 sleep 6 6 finished /tmp/ts-out.kjWcqk 0 7.00/0.00/0.00 sleep 7 7 finished /tmp/ts-out.i9BXum 0 8.01/0.00/0.00 sleep 8 8 finished /tmp/ts-out.AWi5Dq 0 9.00/0.00/0.00 sleep 9 9 finished /tmp/ts-out.kVAX0u 0 10.00/0.00/0.00 sleep 10 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  • 22.
    ts のオプション [1/3] ジョブの情報を確認する 2016-09-13社内勉強会 22 オプション 意味 -t [id] 指定されたジョブの出力を tail -f する -c [id] 指定されたジョブの出力を cat する -p [id] 指定されたジョブのプロセス ID を表示する -o [id] 指定されたジョブの出力ファイル名を表示する -i [id] 指定されたジョブの情報を表示する -s [id] 指定されたジョブの状態を表示する
  • 23.
    ts -i [id] 指定されたジョブの情報を表示する 2016-09-13社内勉強会 23 $ ts -i 3 Exit status: died with exit code 0 Command: sleep 4 Slots required: 1 Enqueue time: Mon Sep 12 22:07:56 2016 Start time: Mon Sep 12 22:07:56 2016 End time: Mon Sep 12 22:08:00 2016 Time run: 4.004059s
  • 24.
    ts のオプション [2/3] ジョブの実行を制御する 2016-09-13社内勉強会 24 オプション 意味 -r [id] 指定されたジョブをキューから取り除く -w [id] 指定されたジョブが終わるまで待つ -k [id] 指定されたジョブを kill する (SIGTERM) -u [id] 指定されたジョブをキューの先頭に移動する -U <id>-<id> 指定された二つのジョブの位置を入れ替える
  • 25.
    ts のオプション [3/3] ジョブを登録するときのオプション 2016-09-13社内勉強会 25 オプション 意味 -n ジョブの出力をファイルに保存しない -E ジョブの標準出力と標準エラーを分けて出力する -g ジョブの出力を gzip する -f バックグラウンドで fork しない (未確認) -m ジョブの出力をメールで送信する (未確認) -d 直前のジョブが正常終了したときだけ実行する -D <id> 指定されたジョブが正常終了したときだけ実行する -L <lab> ジョブに名前を付ける -N <num> ジョブが使うスロット数を指定する
  • 26.
    ts -D [id] 指定されたジョブが正常終了したときだけ実行する 2016-09-13社内勉強会 26 $ ts -S 2 $ ts sleep 20 0 $ ts sleep 10 1 $ ts -D 0 sleep 5 2 $ ts sleep 5 3 ◦ ID = 2 のジョブは ID = 0 のジョブが正常終了したら実行が始まる
  • 27.
    実行の様子 実行直後 2016-09-13 社内勉強会 27 $ts ID State Output E-Level Times(r/u/s) Command [run=2/2] 0 running /tmp/ts-out.flebwV sleep 20 1 running /tmp/ts-out.RGTygW sleep 10 2 queued (file) [0]&& sleep 5 3 queued (file) sleep 5
  • 28.
    実行の様子 10 秒後 2016-09-13 社内勉強会28 $ ts ID State Output E-Level Times(r/u/s) Command [run=2/2] 0 running /tmp/ts-out.flebwV sleep 20 2 queued (file) [0]&& sleep 5 3 running /tmp/ts-out.4MUpNi sleep 5 1 finished /tmp/ts-out.RGTygW 0 10.01/0.00/0.00 sleep 10 ◦ ID = 1 のジョブが終了する ◦ ID = 2 のジョブは ID = 0 を待っているので実行が開始されない ◦ ID = 3 のジョブの実行が開始される
  • 29.
    実行の様子 15 秒後 2016-09-13 社内勉強会29 $ ts ID State Output E-Level Times(r/u/s) Command [run=1/2] 0 running /tmp/ts-out.flebwV sleep 20 2 queued (file) [0]&& sleep 5 1 finished /tmp/ts-out.RGTygW 0 10.01/0.00/0.00 sleep 10 3 finished /tmp/ts-out.4MUpNi 0 5.01/0.00/0.00 sleep 5 ◦ ID = 3 のジョブが終了する ◦ ID = 2 のジョブは ID = 0 を待っているので実行が開始されない
  • 30.
    実行の様子 20 秒後 2016-09-13 社内勉強会30 $ ts ID State Output E-Level Times(r/u/s) Command [run=1/2] 2 running /tmp/ts-out.c9eVnz [0]&& sleep 5 1 finished /tmp/ts-out.RGTygW 0 10.01/0.00/0.00 sleep 10 3 finished /tmp/ts-out.4MUpNi 0 5.01/0.00/0.00 sleep 5 0 finished /tmp/ts-out.flebwV 0 20.01/0.00/0.00 sleep 20 ◦ ID = 0 のジョブが終了する ◦ ID = 2 のジョブの実行が開始される
  • 31.
    実行の様子 25 秒後 2016-09-13 社内勉強会31 $ ts ID State Output E-Level Times(r/u/s) Command [run=0/2] 1 finished /tmp/ts-out.RGTygW 0 10.01/0.00/0.00 sleep 10 3 finished /tmp/ts-out.4MUpNi 0 5.01/0.00/0.00 sleep 5 0 finished /tmp/ts-out.flebwV 0 20.01/0.00/0.00 sleep 20 2 finished /tmp/ts-out.c9eVnz 0 5.01/0.00/0.00 [0]&& sleep 5 ◦ ID = 2 のジョブが終了する
  • 32.
    ところで -D って複数指定できるの? ◦ できない! ◦右図のような制御ができない プログラムを修正すればできる ◦ 実際できた ◦ -D の値を int で持っているのを 配列に変更するだけ 2016-09-13 社内勉強会 32 ここができない!
  • 33.
    ts の後片付け バックグラウンドの tsサーバプロセスを終了する 2016-09-13 社内勉強会 33 $ ts -K ◦ 必要になったとき (ジョブを登録したとき等) に自動起動している
  • 34.