シンプルなキューイングシステム?


10

汎用のPCがある場合、それを使用してバックグラウンドで24時間体制でいくつかのタスクを実行します。

基本的に、次のようなコマンドが必要です。

add-task *insert command here*
list-tasks
remove-task(s)

追加されたタスクは単にキューに入れられ、バックグラウンドで次々に実行されます(シェルのログアウト後も実行を続けます)。

これを行う簡単なスクリプト/プログラムはありますか?

回答:


7

batchあなたが何をしているのかを多かれ少なかれ行う標準的なコマンドがあります。より正確にbatchは、システムの負荷が1つずつ高くないときにジョブを実行します(したがって、並列化は行われません)。batchコマンドは、の一部であるatパッケージ。

echo 'command1 --foo=bar' | batch      
echo 'command2 "$(wibble)"' | batch
at -q b -l              # on many OSes, a slightly shorter synonym is: atq -q b
at -q b -r 1234         # Unschedule a pending task (atq gives the task ID)

batchコマンドが「並列化を行わない」と言うのは間違っています。通常、あるジョブを開始してから次のジョブを開始するまでには、デフォルトの60秒の遅延があります。ただし、最初のジョブが完了するまで次のジョブを待機させるものは何もありません。オプションでatd設定された値-bが経過するとすぐに、バッチキューからジョブを開始します(atdmanページを参照)。
rsaw

Batchはタスクを厳密にシリアル化しないため、単一の共有リソースがある場合は、@ sitaramの回答(タスクスプーラー)がより適切に機能するはずです。
ergosys

5

別の解決策は、を使用lpdして、ジョブを実行するカスタムの「プリンタードライバー」を作成することです。同様のリクエストがあったときに、友人が私を助けてくれました。このようなスクリプトを作成し、次の場所に配置し/tmp/batch.shます。

#!/bin/bash

TMPFILE=$(mktemp /tmp/XXXX)
exec <"$6"
cat - > $TMPFILE
chmod a+x $TMPFILE
$TMPFILE
rm -f $TMPFILE

次に実行します:

lpadmin -p batch1 -E -P /tmp/batch.sh

これによりキューが開始され、batch1の代わりに他の名前を使用してさらにキューを作成できます。以下を使用してジョブを追加します。

lp -d batch1 /path/to/jobscript

ジョブを管理するlpqlprmlpstat。ジョブに引数を渡す際の柔軟性を高めたい場合は、batch.shスクリプトをより洗練されたものにすることができます。

batchこのルートをたどる前に試しましたが、OSXのキューとして機能しないか、間違って使用していました。)


@arnaudが「コモディティPC」を指定していることを理解しています。これは、おそらくこのソリューションをテストしたOSXではないことを意味します。ただし、これは移植可能である必要があり、よりもはるかに柔軟ですbatch
Joe Fusion

1
これは私が今まで見た中で最も本物のハックの1つである可能性があります。
チアゴマセド2017年

悲しいことに、これはもはや機能していないようです。github.com/apple/cups/commit/...
wdkrnls

4

キューイングシステムはたくさんありますが、多くの場合非常に特殊化されています。

atスケジューラを調べてみてください。それはようなものだcronいくつかの点で、それはより多くのリピートの仕事のためのより1時間ジョブのキューのような設定です。システムの負荷やジョブのシーケンスなど、時間以外の基準で物事を「スケジュール」できます。

あなたのお気に入りのディストリビューションには、ほぼ間違いなくパッケージが含まれています。


2

この質問は数年前のものなので、元のポスターには役に立たないかもしれませんが、他の人には役立つかもしれません。

まず、「タスクスプーラ」が答えです。それはかなり強力で、Fedoraは少なくともそれを持っています。

しかし、私が使用する多くのサーバーでは、手間をかけずに任意のパッケージをインストールすることはできないため、理想的には純粋なbash(またはperlなど)が必要です。

これにしばらく苦労した後、私は今のところうまく機能しているように見える純粋なbashの実装を思いつきました。https://github.com/sitaramc/bqで見つけることができます

これは1つのbashスクリプトなので、インストールは簡単です。ただし、2番目と3番目の要件がパントされます(ただし、これらも実装するのは簡単です)。

スクリプトは自由にコメントされ、必要に応じて数分で確認できます。


debianパッケージはタスクスプーラであり、実行可能ファイルは他のものと衝突した「ts」の代わりに「tsp」です。また、キューにあるタスクを並べ替えることができ、at / batchではそれを行うことができないため、これも気に入っています。
ergosys
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.