【问题标题】:Run batch jobs in background after server logout服务器注销后在后台运行批处理作业
【发布时间】:2014-10-06 06:59:10
【问题描述】:
我有一个 csh-shell 脚本,它在服务器上启动 N 个批处理作业。完成一项作业后,脚本将运行另一项作业,直到所有运行完成。
只要我登录服务器,这一切都很好。
由于运行需要几天时间,我不得不不时退出,问题就来了:
即使我运行脚本 jobs.sh 然后使用 nohup 命令启动 batch.sh 中的批处理作业,任务在已启动的批处理作业已完成,并且没有启动新的批处理作业。我怎样才能防止这种情况发生?
$ nohup jobs.sh
看起来或多或少是这样的:
#!/bin/csh -f
...
eval "nice +5 batch.sh <options>"
batch.sh 例程如下所示:
time program.x
【问题讨论】:
标签:
shell
unix
parallel-processing
batch-processing
gnu-screen
【解决方案1】:
在screen 会话中启动您的脚本,它不会在您注销/断开连接时被杀死。您可以稍后重新登录以检查内容时重新附加会话。
如果您是screen 的新手,您可能想查看this page:
Screen 是一个基于文本的程序,通常被描述为窗口管理器或终端多路复用器。虽然它做了很多事情,但它的两个最大特点是它的可拆卸性和多路复用性。可分离性意味着您可以从屏幕内运行程序,分离和注销,然后稍后登录,重新连接,程序仍然存在。多路复用意味着您可以在单个屏幕会话中运行多个程序,每个程序都在自己的窗口中。您可以一次显示多个窗口,或者只是在它们之间切换,即使您只有一个终端窗口可以使用。
tmux 是另一个类似的程序。
【解决方案2】:
尝试使用GNU Screen。它允许您一次打开多个 shell。您可以断开与那些正在运行的 shell 的连接(即关闭与 Putty 的会话),他们将继续做他们的事情。
使用nohup,您无法恢复互动。