今天,我偶然发现了一个很酷的 Linux 命令行实用程序,叫做 “任务后台处理程序”. 顾名思义,Task spooler 是一个 Unix 批处理系统,可用于将 Linux 命令添加到队列中,并按数字顺序(准确地说是升序)一个接一个地执行它们。 请不要将其与 ‘在’ 命令,用于在指定时间执行 Linux 命令。 不像 在 命令,任务假脱机程序在前一个命令完成后立即从队列中运行命令。
当您必须运行大量命令时,此实用程序非常有用,但您不想浪费时间等待一个命令完成并运行下一个命令。 您可以将它们全部排队,Task Spooler 将一一执行它们。 同时,您可以进行其他活动。 每个系统中的每个用户都有他/她自己的作业队列。 当您知道您的命令依赖于大量 RAM、大量磁盘使用、提供大量输出或出于某种原因最好不要同时运行它们时,它也非常有用。 简而言之,Task Spooler 是一个命令行程序,用于将其他命令排队以进行批处理。
下载 – 免费电子书:“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命令添加到队列并使用Task Spooler一一执行
让我们看一些实际的例子。 此处提供的所有示例均在 Ubuntu 18.04 LTS 系统中进行了测试。
笔记: 在 Debian/Ubuntu 系统中,Task Spooler 应该使用 ‘tsp’ 命令执行,因为有另一个同名的程序叫做 ts (时间戳权威工具(客户端/服务器))。 对于 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,按升序排列。 此外,它还显示队列中命令的当前状态(例如已完成或正在运行)。 echo 命令非常简单和简短,所以我们得到的结果是“完成”。
让我们运行一些需要更多时间才能完成的命令。 看看下面的命令:
$ find / -type f -printf '%T+ %pn' | sort | head -n 20
此命令将查找并显示根 (/) 文件系统中最旧的 20 个文件。
现在将上述命令添加到队列中:
$ tsp find / -type f -printf '%T+ %pn' | 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+ %pn 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 命令添加到队列
正如您在上面的输出中看到的,ID 为 2 的命令正在运行。 同样,您可以使用 Task Spooler 添加任意数量的命令。
更新:
正如我们的一位读者在评论部分提到的,find 命令应该像下面这样运行:
$ tsp sh -c "find Downloads/ -type f -printf '%T+ %pn' | sort | head -n 20"
要查看正在运行的作业的输出以检查发生了什么,请输入以下命令:
$ tsp -c 2
这里,2 是运行命令的 ID。 按 CTRL+C 返回终端。 它不会取消正在运行的命令。 它只会带你回到航站楼。 该作业仍将在后台运行。
您可以使用从队列中删除命令(正在运行、已完成、已排队) -r 标志后跟 ID,如下所示。
$ tsp -r 2
上述命令将从队列中删除 ID 为 2 的命令。
要清除队列中的所有命令,只需运行:
$ tsp -C
请注意,这里 C 是 首都. 上述命令将从队列中清除最后完成的命令。 它不会删除任何正在运行的命令或队列中的命令。
请记住,您需要在 Debian/Ubuntu 以外的发行版中运行 Task Spooler ts 命令。
有关更多详细信息,请参阅手册页。
$ man ts
或者,
$ man tsp
建议阅读:
- 如何在 Linux 中运行特定时间的命令
结论
当我必须运行多个命令时,我发现 Task spooler 非常有用。 我只是一个懒惰的人,等待一个命令完成并执行另一个命令。 使用 Task spooler,我将要执行的命令列表排入队列,并按升序一一执行队列中的命令。 我还可以随时使用其 ID 查看任何正在运行的命令的输出。 请注意,它不会一次运行所有命令。 相反,它将一个接一个地运行命令。 也就是说,Task Spooler 选择用于执行批处理作业。
感谢您的光临!
帮助我们帮助您:
- 订阅我们的电子邮件通讯: 立即注册
- 支持 OSTechNix: 通过贝宝捐款
- 下载免费的电子书和视频: TradePub 上的 OSTechNix
- 联系我们: 红迪网 | Facebook | Twitter | 领英 | RSS订阅
祝你有美好的一天!!