既然批处理不接受输入文件,就要更换队列吗?

既然批处理不接受输入文件,就要更换队列吗?

背景

我在一家研究所工作,长期以来一直使用该batch命令向我们的机器提交作业队列。然而,最近的更新将该batch命令更改为符合 POSIX 标准,其结果是它不再需要输入文件。因此,我必须在at>提示符下手动输入每个命令,而不是重复使用旧的队列输入文件并在需要时进行较小的更改。这是相当耗时的,而且考虑到无论如何batch处理工作是多么糟糕,几乎是浪费时间,而不是自己开始工作。

问题

我能找到的唯一替代队列要么价格昂贵,要么不起作用。我正在寻找一个队列,它只是按时间顺序运行给定的作业;没有优先队列或类似的东西。现在有哪些队列的batch功能不一样?

答案1

expect( 和pexpect) 旨在自动与需要“交互式”输入的程序进行交互。 expect允许自动启动程序、等待其提示、发送响应、等待另一个提示等。

下面是一个 Expect 脚本的简单示例,该脚本启动batch并创建一个作业供其调度。它启动batch,等待提示,创建作业,等待提示,发送 control-D ( \004),等待batch确认作业创建的响应,例如job 271 at Sat Oct 25 14:31:00 2014,然后等待一秒钟batch完成并退出:

#!/usr/bin/expect --

spawn batch
expect "at>"
send "echo Hello from batch\r"
expect "at>"
send "\004"
expect "job"
sleep 1

expect具有许多高级功能。您可以创建过程并操作变量。欲了解更多信息,请参阅expect主页expect常问问题。这expect维基百科页面信息也很丰富。

我还没有尝试过,但也许可以创建一个expect从标准输入读取并将作业排队的脚本。或者,可以创建一个 shell/sed/awk/python 脚本来从输入上的 stdin 读取并在输出上编写一个 Expect 脚本。

相关内容