2 Stimmen

Hinzufügen von RPC-Funktionen zu Bernsteins Daemontools

Ich bin ein Informatikstudent aus Italien und muss ein Projekt auf der Grundlage eines geändert Version des Daemontools von D.J. Bernstein, die unter Unix Remote Procedure Calls implementieren soll.

Normalerweise verwende ich diese Syntax, um einen Daemon mit den Tools zu starten:

svc -u /service/NameOfDaemon

Und runter damit:

svc -d /service/NameOfDaemon

So kann ich einen Daemon lokal steuern. Die Idee ist, einen Codeblock hinzuzufügen, um einen Daemon auf einem entfernten Rechner steuern zu können, dies wird die ideale Syntax sein:

svc -u IP/service/NameOfDaemon

wobei IP für die tatsächliche, dem Benutzer bekannte IP des Zielrechners steht.

In diesen Tagen habe ich gegoogelt und gelernt, über RPC und DTools, aber ich bin ein bisschen stecken, kann jemand mir helfen, beginnen?

Vielleicht auch einige Literaturempfehlungen für mein Projekt?

2voto

Tom Anderson Punkte 44661

Der Unix-Weg, dies zu tun, ist zu sagen:

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

El Unix-Philosophie geht es darum, kleine Werkzeuge zu entwickeln, die eine Sache gut erledigen und mit anderen Werkzeugen zusammenarbeiten. svc ist ein Werkzeug, das Daemons auf dem lokalen Rechner kontrollieren kann. ssh kann Werkzeuge auf entfernten Rechnern ausführen. Es besteht keine Notwendigkeit für ein weiteres Tool.

Wenn Sie unbedingt einen einzigen Befehl benötigen, der sowohl lokale als auch entfernte Daemons steuern kann, dann können Sie, wie Chris vorschlägt, ein Shell-Skript schreiben, das Folgendes ausführt svc o ssh nach Bedarf.

1voto

Chris Jester-Young Punkte 212385

supervise verwendet Unix-Domänen-Sockets, um Anfragen zu empfangen. Der Vorteil der Verwendung von Unix-Domain-Sockets ist, dass der Zugriff darauf über die üblichen Dateisystemberechtigungen gesteuert werden kann - in diesem Fall erlaubt es nur Root, auf den Socket zuzugreifen, daher der Grund, warum Sie normalerweise svc als Wurzel.

Sobald Sie jedoch über das Netzwerk gehen, müssen Sie sich Gedanken über die Netzwerkauthentifizierung machen (es sei denn, Sie wollen, dass jeder x-beliebige Mensch Ihre Dienste starten und stoppen kann). Wenn Sie das lösen können, ist der Rest ein Kinderspiel:

  • Schreiben Sie einen Dienst, der über tcpserver die sich auf Folgendes berufen können svc auf dem entfernten Rechner für Sie. Wenn die Zugriffskontrolle, die von tcpserver für Sie ausreicht, dann ist das gut so; andernfalls muss Ihr Dienst den Rest erledigen.
    • Um sicher zu sein, sollten Sie diesen Dienst nicht als Root ausführen (d. h. geben Sie immer -u über die tcpserver Befehlszeile). Ändern Sie stattdessen einfach die (Gruppen-)Eigentümerschaft an Ihrem supervise Sockets, so dass sie von dem Benutzer, unter dem Ihr Dienst läuft, gelesen und geschrieben werden können.
  • Schreiben Sie ein Shell-Skript auf der Client-Seite, das sich um svc . Er prüft, ob die Syntax "Remote Server" verwendet wird, und wenn ja, stellt er eine Verbindung zu Ihrem Remote-Dienst her (und ruft ansonsten nur svc wie üblich).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X