我习惯了具有灵活排队配置可能性的 IBM i (AS/400) 批处理。我正在寻找类似的 Linux 批处理工具。
最重要的是一次从队列中取出一项作业并执行。之后,将扫描队列以查找更多条目。如果有的话,下一个任务将被取出来运行。
at -b
相对接近,但如果一个作业占用的资源太少以至于负载保持下降,更多的任务会并行执行,这是不希望的。
Run-parts 将是另一种选择,但它的行为过于静态,并且不会作为守护进程运行以在给定队列中查找新条目。我可以将其作为常规 cron 作业运行,但我需要自己处理要从队列中删除的作业。
我是否必须编写自己的代码或扩展 at 才能实现所需的功能,或者是否有可用的替代批处理排队机制?
你可以使用 bash 来做到这一点:
1- 使用 mkfifo 创建 fifo(你也可以创建文件)
2-尾随fifo并将每一行传递给您的执行程序(这将是一种任务服务器)
3-例如将您的命令发送到队列(这将客户端请求任务)
PS:您可以像下面的示例一样简化第 2 步,但是当您将“exit”发送到命令缓冲区时,这将完成任务侦听器
ts - task spooler. A simple unix batch system
应该完成任务。它运行一个任务后台处理程序/队列服务器,您可以使用一个简单的命令添加一个新任务,例如:您可以指定槽数 - 也就是一次应该执行多少个作业。默认情况下,这设置为一个,AFAIK。它还具有一些高级功能,例如仅在某个先前的命令成功时才运行命令。您还可以查看每个作业的队列和详细信息。您可以在手册页中找到更多详细信息。