簡単なキュー登録による複数タスクのバッチ処理を可能にするTask Spooler

 Task Spoolerは、バッチ処理させたいタスク群をシェルからキュー(待ち行列)に直接登録するためのユーティリティだ。その使用法は簡単で、特別な設定も必要とせず、またキューに登録したコマンドの確認と編集も行える他、こうしたコマンド群からの出力も随時確認できるようになっている。

 Task Spoolerの機能に関しては、atといったバッチ処理の遅延実行ツールと似ている部分も存在する。つまりTask Spoolerもatも、複数のキューが扱え、そこに登録しておいたコマンド群を後から実行させるという点は共通しているのだが、キューに登録したコマンドの実行結果については、atの場合はユーザにメール送信されるのに対して、Task Spoolerの場合はコマンドラインにて直接確認できるのだ。またTask Spoolerによる処理そのものも、個々のコマンドを指定時刻に実行させることではなく、ごく単純に、キューに登録したコマンドを順番に実行させることを主目的としている。

 Fedora、openSUSE、UbuntuのメインリポジトリにTask Spoolerのパッケージは収録されていないが、Debian、Ubuntu、openSUSE 10.xの一部バージョン用パッケージは作成されており、ソースコードもプロジェクトのホームページから取得できる。本稿の執筆にあたってもTask Spoolerのバージョン0.6のソースを入手した上で、64ビット版Fedora 9マシンを用いたソースからのインストールを行った。なおTask Spoolerをビルドする際にautotoolsは使用できないが、そのインストールは通常の「make; sudo make install」にて実行すればよく、これによりTask Spoolerのメインコマンドであるtsおよびmanページが/usr/localにインストールされる。

 下記に掲載したサンプルは、Task Spoolerを用いた簡単な実行例である。ここでは最初に新規のジョブを1つキューに登録した上で、その処理状況のチェックを行っている。なお2番目の実行例のように引数指定なしでtsを実行すると、処理の完了したタスクを含めたキューの登録ジョブが一覧されるが、この例の場合は非常に単純なコマンドを登録したため、即座に処理されてしまったようだ。その次に実行した「ts -c」は、stdoutを介して当該コマンドの実行結果を確認するための指定である。つまり-cオプションは、各タスクの実行出力を書き出したファイルをcatにて表示させるという指定なのだ。同じくその次に実行した「ts -i」は、ジョブ情報を表示させるための指定である。なおこの実行例では用いていないが、処理の終了したジョブをキューから削除するには「ts -C」コマンドを使用すればいい。

$ ts echo "hello world"
6

$ ts
ID   State      Output               E-Level  Times(r/u/s)   Command [run=0/1]
6    finished   /tmp/ts-out.QoKfo9   0        0.00/0.00/0.00 echo hello world

$ ts -c 6
hello world

$ ts -i 6
Command: echo hello world
Enqueue time: Tue Jul 22 14:42:22 2008
Start time: Tue Jul 22 14:42:22 2008
End time: Tue Jul 22 14:42:22 2008
Time run: 0.003336s