想要运行命令列表,但能够在运行时编辑该列表

2024-05-06

我有一个要运行的(bash)命令列表:

<Command 1>
<Command 2>
...
<Command n>

每个命令都需要很长时间才能运行,有时在看到(例如)的输出后<Command 1>,我想更新一个参数<Command 5>,或添加一个新的<Command k>在列表中的任意位置。但我希望能够随时离开我的机器,并让它在我上次更新列表时继续工作。

这与这里的问题类似:在 shell 脚本运行时编辑它 https://stackoverflow.com/questions/3398258/edit-shell-script-while-its-running。其中一些答案可以提供服务,但是这个问题有想要编辑脚本文件本身的额外限制,我怀疑有一个更简单的答案,因为我没有那个确切的限制。

我当前的解决方案是通过调用第二个脚本来结束我的脚本。我可以在第一个文件运行时编辑第二个文件,这使我可以将新命令附加到列表末尾,但我无法对第一个文件中的命令列表进行任何更改。一旦第二个文件开始执行,我就无法再进行任何更改。但我经常停止我的脚本来插入更新,这有时意味着停止一个几乎完成的长命令,这样我就可以在离开我的机器一段时间之前更新列表中的后续项目。我当然可以用这种方式将许多文件链接在一起,但这对于(希望)有一个简单的解决方案来说似乎很混乱。


这更多的是一个概念性的答案,而不是我提供完整代码的答案。我的想法是运行 Redis (Redis 描述见此处) http://redis.io/topics/data-types-intro- 安装非常简单 - 并将其用作数据结构服务器。在您的情况下,数据结构将是一个作业列表。

因此,您基本上将每个作业添加到 Redis 列表中,您可以使用LPUSH在命令行:

echo "lpush jobs job1" | redis-cli

然后,如果您愿意,您可以并行启动一个或多个工作人员,并且它们坐在一个循环中,重复执行BLPOP列表中的作业(阻止弹出,等待直到有作业)并处理它们:

#!/bin/bash
while :; do
    job=$(echo brpop jobs 0 | redis_cli)
    do $job
done

然后,当工作人员正在使用删除和插入运行时,您可以自由地修改列表。

Example here https://stackoverflow.com/a/22220082/2836621.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

想要运行命令列表,但能够在运行时编辑该列表 的相关文章

随机推荐