ssh终止后,保持服务器在EC2实例上运行

TH3*_*339 15 ssh amazon-ec2

目前,我有两个服务器在一个EC2实例(MongoDBbottlepy)上运行.当我连接到实例并启动这两个服务器时,一切正常.但是,当我关闭SSH会话(实例仍在运行)时,我丢失了这两台服务器.退出后有没有办法让服务器保持运行?我Bitvise Tunnelier在Windows 7上使用.我使用的实例是Ubuntu Server 12.04.3 LTS.

Joa*_*kim 16

对于那些从谷歌搜索登陆的人,我想添加tmux作为另一种选择.tmux广泛用于此目的,并预装在新的Ubuntu EC2实例上.

管理单个会话

这是一个伟大的答案哈米什·唐纳给一个类似的问题在askubuntu.com过来:

我会使用终端多路复用器 - 屏幕是最知名的,而tmux是这个想法的最新实现.我使用tmux,并建议你这样做.

基本上tmux将在计算机上运行终端(或一组终端).如果在远程服务器上运行它,则可以在没有终端死机的情况下断开它.然后,当您稍后再次登录时,您可以重新连接,并查看您错过的所有输出.

要第一次启动它,只需输入

tmux
Run Code Online (Sandbox Code Playgroud)

然后,当您想要断开连接时,执行Ctrl+ B,D(即按Ctrl + B,然后释放两个键,然后按d)

再次登录时,您可以运行

tmux attach
Run Code Online (Sandbox Code Playgroud)

然后你将重新连接到tmux并查看发生的所有输出.请注意,如果您不小心丢失了ssh连接(假设您的网络出现故障),则tmux仍将运行,但它可能认为它仍然连接到连接.您可以告诉tmux从最后一个连接分离并通过运行连接到新连接

tmux attach -d
Run Code Online (Sandbox Code Playgroud)

实际上,您可以一直使用该-d选项.在服务器上,我在我的>中有这个.bashrc

alias tt='tmux attach -d'
Run Code Online (Sandbox Code Playgroud)

因此,当我登录时,我可以输入tt并重新连接.如果需要,可以更进一步>将命令集成到ssh的别名中.我在服务器上运行tmux中的邮件客户端>,我有一个本地别名:

alias maileo='ssh -t mail.example.org tmux attach -d'
Run Code Online (Sandbox Code Playgroud)

这会对服务器执行ssh并在最后运行命令 - tmux attach -d-t选项可确保终端启动 - 如果提供了命令,则默认情况下不会在终端中运行.所以现在我可以maileo在本地命令行上运行并连接到服务器和tmux会话.当我从tmux断开连接时,ssh连接也被终止.

这显示了如何将tmux用于特定用例,但tmux可以做更多的事情.这个tmux教程将教你更多,还有更多的东西.

管理多个会话

如果您需要同时在后台运行多个进程,这可能很有用.为了有效地执行此操作,将为每个会话命名.

启动(并连接到)新的命名会话:

tmux new-session -s session_name
Run Code Online (Sandbox Code Playgroud)

如上所述从任何会话中分离:Ctrl+ B, D.

列出所有活动会话:

tmux list-sessions
Run Code Online (Sandbox Code Playgroud)

连接到命名会话:

tmux attach-session -t session_name
Run Code Online (Sandbox Code Playgroud)

要杀死/停止会话,您有两种选择.一种选择是exit在连接到要杀死的会话时输入命令.另一种选择是使用命令:

tmux kill-session -t session_name
Run Code Online (Sandbox Code Playgroud)


gun*_*ert 10

如果您不想将某个进程作为服务运行(或通过apache模块),您可以(就像我使用IRC一样)使用gnome-screen安装屏幕http://hostmar.co/software-small.

screen 即使你关闭了连接,它也会继续在你的服务器上运行 - 因此你开始运行的每个进程都会继续运行.

  • 屏幕是一个不错的选择,特别是对于OP的用例而言。很多人也喜欢tmux,这可能是满足更高级使用需求的更好选择 (2认同)