向Bernstein的Daemontools添加RPC功能

时间:2011-06-05 17:38:14

标签: rpc

我是来自意大利的计算机科学专业的学生,​​我必须根据D.J的Daemontools的修改版本做一个项目。 Bernstein必须在Unix下实现远程过程调用。

通常使用这些工具来获取守护进程:

svc -u /service/NameOfDaemon

以此为本:

svc -d /service/NameOfDaemon

所以我可以在本地控制一个守护进程。我们的想法是添加一段代码以便能够控制位于远程机器上的守护进程,这将是理想的语法:

svc -u IP/service/NameOfDaemon

其中IP代表用户已知的目标机器的实际IP。

在这些日子里,我用Google搜索并了解了RPC和DTools,但我有点卡住了,有人可以帮助我开始吗?

也许还有一些推荐阅读我的项目?

2 个答案:

答案 0 :(得分:2)

unix的做法是:

ssh -n root@remotehost svc -u /service/NameOfDaemon

unix philosophy是关于创建一个很好的小工具,并与其他工具一起工作。 svc是一个可以控制本地计算机上守护进程的工具。 ssh可以在远程计算机上运行工具。不需要其他工具。

如果绝对必须有一个可以控制本地和远程守护进程的命令,那么正如Chris建议的那样,你可以根据需要编写一个运行svcssh的shell脚本。

答案 1 :(得分:1)

supervise使用Unix域套接字来接收请求。使用Unix域套接字的优点是可以通过通常的文件系统权限来控制对它的访问 - 在这种情况下,它只允许root访问套接字,因此你通常必须运行svc作为根。

但是,一旦您通过网络,您就开始考虑网络身份验证(除非您希望任何Tom,Dick和Harry启动和停止您的服务)。如果你能解决这个问题,其余的很容易:

  • 编写一个在tcpserver上运行的服务,可以为您调用远程计算机上的svc。如果tcpserver提供的访问控制对您来说足够了,那就好了;否则你的服务必须处理剩下的事情。
    • 为了安全起见,请不要以root身份运行此服务(即,始终在-u命令行上指定tcpserver)。相反,只需更改supervise套接字的(组)所有权,以便用户可以读取和写入您的服务。
  • 在客户端编写一个包装svc的shell脚本。它会检查“远程服务器”语法,如果使用它,它将连接到您的远程服务(否则只需像往常一样调用svc)。