今日、私は「タスクスプーラー」と呼ばれるクールなLinuxコマンドラインユーティリティに出くわしました。 。名前が示すように、タスクスプーラーはUnixバッチシステムであり、Linuxコマンドをキューに追加し、番号順に(正確には昇順で)次々に実行するために使用できます。 「at」と混同しないでください コマンド。指定された時間にLinuxコマンドを実行するために使用されます。 at とは異なり、 コマンドの場合、タスクスプーラは、前のコマンドが終了するとすぐにキューからコマンドを実行します。
このユーティリティは、多くのコマンドを実行する必要がある場合に非常に便利ですが、1つのコマンドが終了して次のコマンドを実行するのを待つ時間を無駄にしたくありません。それらをすべてキューに入れることができ、TaskSpoolerはそれらを1つずつ実行します。その間、あなたは他の活動をすることができます。各システムの各ユーザーには、独自のジョブキューがあります。また、コマンドが大量のRAM、大量のディスク使用、大量の出力、または何らかの理由で同時に実行しない方がよいことがわかっている場合にも非常に役立ちます。一言で言えば、Task Spoolerは、バッチ実行のために他のコマンドをキューに入れるためのコマンドラインプログラムです。
ダウンロード -無料の電子書籍:「Linuxコマンドラインのチートシート」この簡単なチュートリアルでは、UnixライクなオペレーティングシステムにTaskSpoolerをインストールして使用する方法を紹介します。
Debian、Ubuntu、LinuxMintにタスクスプーラーをインストールする
Task Spoolerは、Debian、Ubuntu、およびその他のDEBベースのシステムのデフォルトリポジトリで利用できます。したがって、コマンドを使用してインストールできます:
$ sudo apt-get install task-spooler
他のシステムの場合は、このリンクからタスクスプーラーのソースファイルをダウンロードできます。 使用するLinuxディストリビューションのネイティブパッケージとしてビルドし、次のいずれかの方法で説明されているようにインストールします。
- 複数のプラットフォーム用のLinuxパッケージを簡単に構築する方法
- CheckInstallを使用してソースからパッケージを構築する方法
Linuxコマンドをキューに追加し、タスクスプーラーを使用して1つずつ実行します
いくつかの実際的な例を見てみましょう。ここで提供されるすべての例は、Ubuntu18.04LTSシステムでテストされています。
注: Debian / Ubuntuシステムでは、 ts と呼ばれる同じ名前の別のプログラムがあるため、タスクスプーラーは「tsp」コマンドで実行する必要があります。 (タイムスタンプ権限ツール(クライアント/サーバー))。 Ubuntu / Debian以外のLinuxディストリビューションの場合は、「ts」コマンドを使用して実行できます。
tspコマンドを実行します:
$ tsp
現在、キューには何もありません。キューにいくつかのコマンドを追加しましょう。これを行うには、次を実行します:
$ tsp echo Welcome OSTechNix
$ tsp echo "Hello World"
次に、tspコマンドを再度実行して、キュー内のコマンドを表示します。
$ tsp
出力例:
ID State Output E-Level Times(r/u/s) Command [run=0/1] 0 finished /tmp/ts-out.jpHIG1 0 0.01/0.00/0.00 echo Welcome OSTechNix 1 finished /tmp/ts-out.8H6LLB 0 0.00/0.00/0.00 echo Hello World
上記の出力からわかるように、各コマンドには、昇順で(0、1、2など)の一意のIDがあります。また、キュー内のコマンドの現在の状態(終了または実行中など)も表示されます。エコーコマンドは非常に単純で短いため、「終了」として結果が得られました。
完了するまでに時間がかかるコマンドを実行してみましょう。次のコマンドを見てください:
$ find / -type f -printf '%T+ %p\n' | sort | head -n 20
このコマンドは、ルート(/)ファイルシステム内の上位20個の最も古いファイルを検索して表示します。
次に、上記のコマンドをキューに追加します。
$ tsp find / -type f -printf '%T+ %p\n' | sort | head -n 20
出力例:
2
次に、tspコマンドを実行して、キュー内のコマンドのリストを表示します。
$ tsp
出力例:
ID State Output E-Level Times(r/u/s) Command [run=1/1] 2 running /tmp/ts-out.79rMXn find / -type f -printf %T+ %p\n 0 finished /tmp/ts-out.jpHIG1 0 0.01/0.00/0.00 echo Welcome OSTechNix 1 finished /tmp/ts-out.8H6LLB 0 0.00/0.00/0.00 echo Hello World

タスクスプーラーを使用してLinuxコマンドをキューに追加する
上記の出力からわかるように、ID2のコマンドが実行されています。同様に、タスクスプーラーを使用して実行するコマンドをいくつでも追加できます。
更新:
コメントセクションで言及した読者の1人として、findコマンドは次のように実行する必要があります。
$ tsp sh -c "find Downloads/ -type f -printf '%T+ %p\n' | sort | head -n 20"
実行中のジョブの出力を表示して何が起こっているかを確認するには、次のコマンドを入力します。
$ tsp -c 2
ここで、2は実行中のコマンドのIDです。 CTRL + Cを押します ターミナルに戻ります。実行中のコマンドはキャンセルされません。ターミナルに戻るだけです。ジョブは引き続きバックグラウンドで実行されます。
-r を使用して、コマンド(実行中、終了、キューに入れられた)をキューから削除できます。 フラグの後に以下のようなIDが続きます。
$ tsp -r 2
上記のコマンドは、ID2のコマンドをキューから削除します。
キューからすべてのコマンドをクリアするには、次のコマンドを実行するだけです。
$ tsp -C
ここでCに注意してください 資本です 。上記のコマンドは、最後に完了したコマンドをキューからクリアします。実行中のコマンドやキュー内のコマンドは削除されません。
ts を使用して、Debian/Ubuntu以外のディストリビューションでTaskSpoolerを実行する必要があることを忘れないでください。 コマンド。
詳細については、manページを参照してください。
$ man ts
または、
$ man tsp
推奨される読み物:
- Linuxで特定の時間コマンドを実行する方法
結論
複数のコマンドを実行する必要がある場合は、タスクスプーラーが非常に便利です。私は、あるコマンドが終了して別のコマンドを実行するのを待つ怠惰な仲間です。タスクスプーラーを使用して、実行するコマンドのリストをキューに入れ、キューからコマンドを昇順で1つずつ実行しました。また、実行中のコマンドの出力を、そのIDを使用していつでも表示できます。すべてのコマンドが一度に実行されるわけではないことに注意してください。代わりに、コマンドを次々に実行します。とはいえ、タスクスプーラーはバッチジョブの実行を選択しています。