如何将Linux命令添加到队列中并一一执行

时间:2020-03-21 11:42:35  来源:igfitidea点击:

今天,我偶然发现了一个很酷的Linux命令行实用程序“ Task Spooler”。
顾名思义,任务假脱机程序是Unix批处理系统,可用于将Linux命令添加到队列中并以数字顺序(准确地说是升序)一个接一个地执行它们。
请不要将其与“ at”命令混淆,该命令用于在指定时间执行Linux命令。
与at命令不同,任务假脱机程序在前一个命令完成后立即从队列中运行命令。

当我们必须运行许多命令时,该实用程序非常有用,但是我们不想浪费时间等待一个命令完成并运行下一个命令。
我们可以将它们全部排队,任务假脱机程序将一个接一个地执行它们。
同时,我们可以进行其他活动。
每个系统中的每个用户都有他/她自己的作业队列。
当我们知道命令取决于大量内存,大量磁盘使用,提供大量输出或者出于任何原因最好不要同时运行它们时,它也非常有用。
简而言之,任务后台处理程序是一个命令行程序,用于排队其他命令以进行批处理执行。

下载-免费电子书:“ Linux命令行速查表”

在这个简短的教程中,让我向我们展示如何在类似Unix的操作系统中安装和使用Task Spooler。

在Debian,Ubuntu,Linux Mint上安装Task Spooler

Task Spooler在Debian,Ubuntu和其他基于DEB的系统的默认存储库中可用。
因此,我们可以使用以下命令进行安装:

$sudo apt-get install task-spooler

对于其他系统,我们可以从此链接下载Task Spooler源文件,并将其作为本机程序包构建到我们使用的Linux发行版中,然后按照以下任何一种方法中的说明进行安装。

  • 如何轻松地为多个平台构建Linux软件包
  • 如何使用CheckInstall从源代码构建软件包

将Linux命令添加到队列中,并使用任务后台处理程序一一执行

让我们看一些实际的例子。
此处提供的所有示例均已在Ubuntu 18.04 LTS系统中进行了测试。

注意:在Debian/Ubuntu系统中,应该使用“ tsp”命令执行Task Spooler,因为存在另一个名为ts的程序(Time Stamping Authority工具(客户端/服务器))。
对于Ubuntu/Debian以外的Linux发行版,可以使用'ts'命令运行它。

运行tsp命令:

$tsp

目前,队列中没有任何内容。
让我们向队列添加一些命令。
为此,请运行:

$tsp echo Welcome theitroad
$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 theitroad
1 finished /tmp/ts-out.8H6LLB 0 0.00/0.00/0.00 echo Hello World

如我们在上面的输出中看到的,每个命令都有一个唯一的ID(按升序排列,分别为(0,1,2 ..等)。
此外,它还显示队列中命令的当前状态(例如已完成或者正在运行)。
echo命令非常简单且简短,因此我们得出的结果为“完成”。

让我们运行一个需要更多时间才能完成的命令。
看一下以下命令:

$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 command来查看队列中的命令列表。

$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 theitroad
1 finished /tmp/ts-out.8H6LLB 0 0.00/0.00/0.00 echo Hello World

如我们在上面的输出中看到的,ID为2的命令正在运行。
同样,我们可以添加要使用任务后台处理程序运行的命令。

更新:

正如我们的读者在注释部分中提到的那样,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

上面的命令将从队列中删除ID为2的命令。

要清除队列中的所有命令,只需运行:

$tsp -C

请注意,这里C是大写字母。
上面的命令将从队列中清除最后完成的命令。
它不会删除任何正在运行的命令或者队列中的命令。

请记住,我们需要使用ts命令在Debian/Ubuntu以外的发行版中运行Task Spooler。

有关更多详细信息,请参见手册页。

$man ts

或者,

$man tsp