这是我正在寻找的功能(并且还没有找到):
我想要按顺序运行x进程。其中一些可能非常耗时。
我希望这些进程在shell的后台运行。
我知道nohup,但它似乎并不完美...假设job1是一项耗时的工作,如果我在执行nohup job1&&& job2&& job3&,然后job2和job3将不会运行,job1可能运行也可能不运行,具体取决于我让nohup运行多长时间。
有没有办法获得我想要的功能?我是ssh'ed到Linux服务器。对于奖励积分,即使我关闭连接,如果我排队的工作会继续运行,我也会喜欢它。
感谢您的帮助。
编辑:问题的一个小附录:如果我有一个包含三个exec语句的shell脚本
执行BIGTHING 执行小事 exec smallthing 它肯定会顺序吗?有没有办法将这些全部包装到一个exec行中以获得相同的功能?即exec BIGTHING&小事和小事或&&或某些
答案 0 :(得分:11)
使用screen
。
screen
job1;job2;job3
- 以分号分隔,它们将按顺序运行CTRL-A
,D
(后)
screen -r
答案 1 :(得分:7)
或者,如果您想要更多地控制队列,例如列出和修改条目的能力,请查看Task Spooler
。它在Ubuntu 12.10 Universe存储库中作为包task-spooler
提供。
答案 2 :(得分:2)
我同意screen
是非常方便的工具。还有一个额外的命令行工具enqueue
- 可以根据需要启用其他作业,即使您已经启动了其中一个作业,也可以在第一个作业已经运行时添加另一个作业。
以下是来自enqueue
自述文件的示例:
$ enqueue add mv /disk1/file1 /disk2/file1
$ enqueue add mv /disk1/file2 /disk2/file2
$ enqueue add beep
$ enqueue list
答案 3 :(得分:1)
更多信息:
如果您将作业与&&amp ;;分开它等同于编程语言中的&& /和运算符,例如在if语句中。如果作业1返回错误,则作业2不会运行,等等。这称为"短路。"如果你将工作分开;相反,无论返回代码如何,它们都将运行。
如果你用&结束这一行它会背景整个事情。如果你忘记了,你可以点击control + z暂停命令并给你一个提示,然后命令" bg"将背景他们。
如果你关闭你的ssh会话,它可能会结束命令,因为它们被附加到你的shell(至少在bash的大多数实现中)。如果您希望在注销后继续使用,请使用命令" disown"。
答案 4 :(得分:0)
在你的命令发出&
之后用于运行名为foo的可执行文件的exmaple:
./foo &
即使关闭ssh连接,它也会继续运行。
答案 5 :(得分:0)
从shell中获取作业的基本机制是
job1 &
所以你可以做一个简单的shell脚本,为其中的几个顺序执行它,尽管在那时我会考虑使用perl或python这样的脚本语言,并编写一个简单的脚本来分叉这些进程。如果你的脚本将自己作为第一步,并且在fork中完成所有工作,它将立即在shell上将控制权返回给你,即使你注销也会继续运行。
答案 6 :(得分:0)
要将它从shell中分离出来(使用&
后面的任务需要进行shell游戏),请使用
setsid foo