Linux:如何在后台排列一些作业?

这里是我正在寻找的function(还没有完全find):

我有我想要顺序运行的x个进程。 其中一些可能相当耗时。

我希望这些进程在我的shell的后台运行。

我知道nohup,但它似乎并不完美…假设job1是一个耗时的工作,如果我按Ctrl + C出空白行后,我做nohup job1 && job2 && job3&,然后job2 job3不会运行,而job1可能运行也可能不运行,这取决于我让nohup运行多久。

有没有办法获得我想要的function? 我ssh'ed到一个Linux服务器。 对于奖励积分,如果即使我closures了连接,我排队等待的工作也会继续运行,所以我很乐意。

谢谢你的帮助。

编辑:一个小的附录的问题:如果我有一个三个exec语句的shell脚本

exec BIGTHING exec smallthing exec小东西

它肯定会顺序吗? 有没有办法将这些全部包装到一个执行行来获得相同的function?

即EXE BIGTHING&smallthing&smallthing或者&&或者somesuch

使用screen

  1. SSH到服务器
  2. 运行screen
  3. 启动你的程序: job1;job2;job3 – 用分号隔开,它们将按顺序运行
  4. 从屏幕上分离: CTRL-AD
  5. 从服务器注销

(后来)

  1. SSH到服务器
  2. 运行screen -r
  3. 而你正在运行你的作业队列的shell

或者,如果您想要对队列进行更多的控制,例如列出和修改条目的功能,请查看Task Spooler 。 它可以在Ubuntu 12.10 Universe仓库中作为程序包task-spooler

我同意screen是非常方便的工具。 还有一个额外的命令行工具enqueue – 允许根据需要排队附加的作业,即使你已经开始了一个作业,当第一个作业已经开始时,你可以添加另一个作业。

这是来自enqueue README的示例:

 $ enqueue add mv /disk1/file1 /disk2/file1 $ enqueue add mv /disk1/file2 /disk2/file2 $ enqueue add beep $ enqueue list 

多一点信息:

如果用&&分开你的工作,它就等价于编程语言中的&& /和操作符,如if语句。 如果作业1返回错误,则作业2将不会运行等,这被称为“短路”。 如果你把工作分开, 相反,他们都将运行,不管返回码。

如果你用&结束该行,它将会背景整个事情。 如果你忘记了,你可以点击控制+ z来暂停命令并给你一个提示,然后命令“bg”将会把它们作为背景。

如果你关闭你的ssh会话,可能会结束命令,因为它们连接到你的shell(至少在大多数bash实现中)。 如果您希望在注销后继续,请使用“disown”命令。

在你的命令之后,

例如运行一个名为foo的可执行文件:

 ./foo & 

即使你关闭你的SSH连接,它也会继续运行。

从shell背景工作的基本机制是

 job1 & 

所以你可以做一个简单的shell脚本,它为它们中的几个顺序执行它,尽管在这一点上我会考虑使用perl或python之类的脚本语言,并写一个简单的脚本来fork这些进程。 如果您的脚本将其自身作为第一步,并在分叉中完成所有工作,则会立即将控制权返回给您,即使您注销也会继续运行。

为了将它从shell中分离出来(任务只是与&背景一致&都受到shell游戏的限制),请使用

setsid foo