2011-06-05 94 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