2011-06-05 95 views
2

我是來自意大利的計算機科學專業的學生,​​我必須做一個基於修改的版本的Daemontools Of D.J. Bernstein必須在Unix下實現遠程過程調用。將RPC功能添加到Bernstein的Daemontools

通常得到一個守護了我用這個語法的工具:

svc -u /service/NameOfDaemon 

上下同這樣的:

svc -d /service/NameOfDaemon 

所以我可以在本地控制守護進程。這樣做是爲了增加一個代碼塊,以便能夠控制位於遠程計算機上的守護程序,這將是理想的語法:

svc -u IP/service/NameOfDaemon 

其中IP代表目標機器的實際IP,通過已知用戶。

在這些日子裏,我搜索瞭解RPC和DTools,但我有點卡住了,誰能幫我開始?

也許還有一些建議閱讀我的項目?

+0

如果你在某人的指導下進行此操作,請問他們應該查看哪些資源。否則這屬於一個像Unix和Linux.SE – jcolebrand 2011-06-05 23:00:02

回答

1

supervise使用Unix域套接字來接收請求。使用Unix域套接字的好處是可以通過通常的文件系統權限來控制對它的訪問---在這種情況下,它只允許root訪問套接字,因此您通常必須以root身份運行svc。然而,一旦你通過網絡,你就必須考慮網絡認證(除非你想讓任何Tom,Dick和Harry開始和停止你的服務)。如果你能解決這個問題,它的其餘部分很簡單:

  • 編寫運行在tcpserver服務,可以在遠程計算機上調用svc你。如果tcpserver提供的訪問控制對您來說已經足夠,那麼就很好;否則你的服務必須處理剩下的事情。
    • 爲了安全起見,請不要以root身份運行此服務(即始終在tcpserver命令行上指定-u)。相反,只需更改您的supervise套接字的(組)所有權,以便它們可由用戶讀取和寫入,以便服務運行。
  • 在客戶端編寫一個包含svc的shell腳本。它檢查「遠程服務器」語法,如果使用它,它將連接到您的遠程服務(並且像往常一樣調用svc)。
+0

@Tom感謝您的答案好吧,明白你在說什麼,這當然是容易和正確的方式來控制遠程機器,但在我的項目中,它被要求真正添加一些代碼在supervice.c或svc.c文件中。然後重新編譯所有工具以獲得它們的修改版本,這些版本能夠實現'svc -u'命令的遠程調用......這很難,並且不是很有用,但是這是我被稱爲做的項目所以我必須遵循這些規範... – ermes007 2011-06-06 14:39:27

2

這樣做的UNIX方法是說:

ssh -n [email protected] svc -u /service/NameOfDaemon 

unix philosophy是關於建立小工具,把一件事做好,並與其他工具一起工作。 svc是一個可以控制本地機器上守護進程的工具。 ssh可以在遠程機器上運行工具。不需要另一種工具。

如果您絕對必須擁有一個可以控制本地和遠程守護進程的命令,那麼可以按照Chris的建議,編寫一個shell腳本,根據需要運行svcssh