2014-01-17 86 views
10

目前,我有兩臺運行在EC2實例(MongoDBbottlepy)上的服務器。當我將SSH連接到實例並啓動這兩臺服務器時,一切正常。但是,當我關閉SSH會話(實例仍在運行)時,我丟失了這兩臺服務器。退出後有沒有辦法讓服務器繼續運行?我在Windows 7上使用Bitvise Tunnelier。 我使用的實例是Ubuntu Server 12.04.3 LTS。保持服務器在ssh終止後在EC2實例上運行

回答

7

如果你不想運行某些程序作爲服務(或通過Apache模塊),你可以(像我使用IRC做)使用gnome-screen Install screen http://hostmar.co/software-small

screen即使關閉了連接,您的服務器也會繼續運行 - 因此您啓動的每個進程也將繼續運行。

+0

屏幕是一個不錯的選擇,特別是對於OP的用例。很多人也喜歡tmux,這對於更高級的使用需求來說可能是更好的選擇 – adavea

+0

如何在EC2 Ubuntu實例上安裝它,我只有會話 – AMH

1

如果您提供了有關您的環境的更多信息,但假設它是Ubuntu Linux,則可以在後臺啓動服務或作爲守護程序啓動服務。

sudo service mongodb start 
nohup python yourbottlepyapp.py & 

您也可以使用Apache mod_wsgi的運行bottle.py的應用程序(如果你想在一個SSH會話,並希望防止它關閉文件描述符使用的nohup)。 (在apache服務下運行)更多的信息在這裏:http://bottlepy.org/docs/dev/deployment.html

希望這會有所幫助。

增加:(你的進程仍然運行退出後的SSH會話)

拿這個例子time.py

import time 
time.sleep(3600) 

然後運行:

$ python3 time.py & 
[1] 3027 
$ ps -Af | grep -v grep | grep time.py 
ubuntu 3027 2986 0 18:50 pts/3 00:00:00 python3 time.py 
$ exit 

然後通過ssh回服務器

$ ps -Af | grep -v grep | grep time.py 
ubuntu 3027  1 0 18:50 ?  00:00:00 python3 time.py 

過程仍在運行(沒有TTY通知)

+0

我正在運行Ubuntu,我會測試你的建議。謝謝! –

+0

我認爲mongodb正在運行,因爲'mongod'包含在init.d文件夾中。但是這個聲明沒有成功'python yourbottlepyapp.py&'... –

+0

它是做什麼的?該程序退出? – Rico

1

您將希望啓動的服務與控制終端斷開連接。我建議你使用nohup來做到這一點,例如

ssh my.server "/bin/sh -c nohup /path/to/service" 

你可能需要把在那裏的&(在引號)在後臺運行。

正如其他人所評論的,如果您運行適當的init腳本來啓動/停止服務(或ubuntu的service命令),則不應該看到此問題。

5

對於那些從谷歌搜索這裏登陸,我想添加tmux作爲另一種選擇。 tmux廣泛用於此目的,並且已預安裝在新的Ubuntu EC2實例上。

在askubuntu處,Hamish Downersimilar question給出了很好的回答。com:

我會使用一個終端多路複用器 - 屏幕是最有名的,tmux是這個想法的最近實現。我使用tmux,並會建議你這樣做。

基本上tmux將在計算機上運行一個終端(或一組終端)。如果您在遠程服務器上運行它,則可以在沒有終端死機的情況下斷開連接。然後,當您稍後再次登錄時,您可以重新連接,並查看您錯過的所有輸出。

要開始它的第一次,只需鍵入

tmux 

然後,當要斷開連接,你做按Ctrl + d(即按Ctrl + B,然後鬆開這兩個鍵,然後按d。

當您再次登錄時,你可以運行

tmux attach 

,您將重新連接到tmux並查看發生的所有輸出。請注意,如果您意外丟失了ssh連接(說您的網絡出現故障),tmux仍然會運行,儘管它可能認爲它仍然連接到連接。你可以告訴TMUX從最後連接到分離,並通過運行

tmux attach -d 

事實上,你可以使用-d選項所有的時間連接到您的新的連接。在服務器上,我有這個在我的>.bashrc

alias tt='tmux attach -d' 

所以,當我登錄我可以只輸入tt並重新安裝。你可以更進一步>如果你想要並將命令集成到ssh的別名中。我的服務器上運行郵件客戶端>裏面TMUX,我有一個本地別名:

alias maileo='ssh -t mail.example.org tmux attach -d' 

這確實SSH服務器和運行在最後的命令 - tmux attach -d-t選項確保終端啓動 - 如果提供了命令,則默認情況下它不會在終端中運行。因此,現在我可以在本地命令行上運行maileo並連接到服務器和tmux會話。當我從tmux斷開連接時,ssh連接也被終止。

這顯示瞭如何爲您的特定用例使用tmux,但tmux可以做得比這更多。這tmux tutorial會教你多一點,而且還有更多。

相關問題