- 設定やデーモン不要で動作する軽量なジョブキューシステムを実現するためのユーティリティ
- Linux/MacOS対応 - POSIX互換システムで flock(2) をサポートしていれば実行可能
- コマンドラインベースの**アドホックなジョブキューイング(ad-hoc queuing)**をサポート
- Makefileのビルド、ファイルダウンロード、ベンチマーク実行などの逐次ジョブに適している
nohup の代替用途としても活用可能
- ジョブの順序はミリ秒単位のタイムスタンプベースの同期によって厳密に保証される
- 各プロセスごとに TIMESTAMP.PID を作成し、flock(ファイルロック)を利用
- 前の flock がアンロックされると次のジョブを開始
- ファイルシステムレベルで同期を行うため、ポーリング(polling)は不要
nq CMDLINE... 形式でジョブをキューに追加すると、ジョブIDを出力した後バックグラウンドで実行
- STDOUT/STDERR はログファイルへリダイレクト
- ログファイルの実行ビット(
+x)によってジョブ状態を視覚的に区別できる
- ログファイル名の拡張子はPIDで構成されており、ジョブ管理がしやすい
- 実行前は
nq の PID、実行後は実際のジョブ PID に変更
- ログファイルをシェルスクリプトのように実行してジョブを再実行可能
at, batch, task-spooler との違い
at
指定した時刻にジョブを実行するツール
システムクロックに基づいて予約時刻にコマンドを実行し、主に単発の予約ジョブに使われる
batch
システムの負荷(load average)が低いときにジョブを実行する
予約よりも負荷ベースの実行制御が目的で、デーモンによって管理される
task-spooler
キューを管理するデーモンを自動起動し、逐次または並列のジョブ処理をサポート
同時実行する最大ジョブ数を指定できる
端末ごとに異なるキューを構成でき、各キューの状態をコマンドで確認可能
nq
デーモンなしで動作し、単純にディレクトリ単位のファイルシステムロック(flock) でキューを管理する
システム負荷や予約時刻は考慮せず、単純にジョブの順序を保証する
キューのログは nqtail でリアルタイムに確認可能
各ディレクトリが独立したキューとして機能するため、環境変数 $NQDIR で複数のキューを分離して運用できる
2件のコメント
コードスタイルがあまりにも昔の Sourceforge スタイルで、過去に戻ったのかと思いましたね(笑)
Sourceforge 時代に比べればまだまだ駆け出しの開発者ですが、どういうことだろう?と思っていたものの、関数の戻り値の型と名前の間に改行が入っているのを見て納得してしまいましたね o.o
もしかすると、そのコードの中にほかにも昔ながらのコーディングスタイルが表れている部分はあるでしょうか?