2017-08-08 65 views
0

我在運行2000端口的事件機器上編寫了一個ruby中的TCP服務器。部署一個用Ruby編寫的TCP服務器

現在,我所做的是ssh到我的服務器,並運行命令ruby lib/tcp_server.rb來打開服務器,但是當我註銷時它會關閉。

我試過nohup和使用&,但似乎很長一段時間都沒有堅持服務器。

所以我的問題是,我如何在端口2000上部署此服務器並保持它運行,就像我們如何將Rails部署到nginx。

它不是一個網絡服務器,而是一個連接設備的tcp服務器,如果有幫助的話。

謝謝!

+0

您需要** **守護進程的Ruby腳本。 –

+0

@pascalbetz是的,我從閱讀中得到了這些,並且認爲把'&'放在命令的末尾應該可以做到,但事實並非如此。你如何建議守護它? – Shobhit

+0

你可以使用像[守護進程](https://github.com/thuehlinger/daemons)這樣的gem讓腳本守護自身或者像[daemontools]這樣的外部工具(http://cr.yp.to/daemontools .html)可以守護(和管理)任意腳本。 – Stefan

回答

1

解決方案1:tmuxscreen

這是接近最簡單的方法,你必須創建一個TMUX或屏幕會話,然後在會話啓動服務器。

解決方案2:nohup

nohup ruby lib/tcp_server.rb > stdout.log 2> stderr.log & 

你已經試過nohup和使用&,我想你已經知道該怎麼做。

解決方案3:守護進程

可以從外殼脫離,並通過派生 兩次,設置會話ID和改變當前工作目錄進程的常駐。

def daemonize 
    exit if fork 
    Process.setsid 
    exit if fork 
    Dir.chdir '/' 
end 

使用這種方法,您將不得不重定向stdout和stderr以保留日誌。

守護進程的另一種方式是使用像daemons這樣的寶石。

更新:

要被殺害後自動重新啓動的過程中,你需要像godpm2一個進程管理器。

要在啓動後自動啓動該過程,您需要編寫一個init scripts,但它的外觀取決於您的服務管理系統和操作系統。其中最知名的就是系統V如果您正在使用Ubuntu,你可能想看看Upstartsystemd

+0

是的,我做了這些,事情是我需要再次啓動它們,如果服務器重新啓動,並且該進程不會重新啓動自己,如果死亡。 – Shobhit

+0

@Shobhit我已經更新了我的答案。我希望它有幫助。 –