Wie erstelle ich in Linux einen Dienst, der Abfragen verarbeiten kann?

Wie erstelle ich in Linux einen Dienst, der Abfragen verarbeiten kann?

Ich möchte einen Linux-Dienst erstellen und mit ihm kommunizieren können. So etwas wie eine Datenbank, der ich Daten hinzufügen und von der ich sie abrufen kann. Gibt es eine Möglichkeit, mit meinem Dienst zu kommunizieren, ohne den Dienst zu einem Server zu machen? Ich meine, ich darf keine httpoder httpsMethoden zum Senden und Abrufen von Daten verwenden. Ich möchte eine Möglichkeit, eine Verbindung zum Dienst herzustellen, ohne eine URLund porteine Nummer zu verwenden.

Antwort1

Ich denke, die Antwort, die Sie suchen, ist die Verwendungsystemd.socket

Nehmen wir an, ich habe ein beliebiges Programm, das stdin liest und in stdout schreibt. Sie können systemd so konfigurieren, dass es über einen Socket zugänglich ist.

Hier ist ein Beispiel, wie Sie systemd hierfür konfigurieren würden:

# /etc/systemd/system/simple.socket
[Socket]
Accept=yes
ListenStream=11111

# /etc/systemd/system/[email protected]
[Unit]
Description="Simple service"
After=network.target simple.socket
Requires=simple.socket

[Service]
Type=simple
ExecStart=-cat -
StanardInput=socket
StandardOutput=socket

Starten Sie als nächstes den Socket mit:

$ sudo systemctl start simple.socket

Nun kann der Dienst durch Einrichten eines Sockets gestartet werden. Ich verwende hierfür ncoder :netcat

$ nc 127.0.0.1 11111

In ExecStartwähle ich die Verwendung cat -, die stdin einfach an stdout weiterleitet. Wenn wir ausführen nc, werden wir feststellen, dass alles, was wir in stdin eingeben, über stdout an uns zurückgesendet wird. Sie haben wahrscheinlich eine interessantere Anwendung, die Sie ausführen möchten.

Ein paar andere coole Punkte:

  • catwird nicht ausgeführt, wenn Sie keinen offenen Socket haben (der Socket hört zu, aber der Dienst ist gestoppt).
  • Wenn Sie eine Verbindung herstellen, startet der Dienst
  • Wenn Sie eine weitere Verbindung herstellen, wird eine weitere Instanz des Dienstes gestartet.
  • Wenn Sie eine Verbindung schließen, wird der Dienst beendet.

Antwort2

Immer wenn etwas Verbindungen empfängt, haben Sie einen Server. HTTP/S ist nur eines von vielen Protokollen. Sie können auch über ein eigenes Protokoll eine Verbindung zu einer Remote-Datenbank herstellen. Wenn Sie nach einer komplexeren Lösung suchen, lesen Sie über SSH-Tunneling – vorwärts und rückwärts. Und es systemdist in keiner Weise ein erforderliches Element Ihrer Lösung.

Antwort3

Wenn Sie nur auf Ihrem lokalen Rechner darauf zugreifen und einfache Skripte erstellen möchten, verwenden Sie ein FIFO. Wenn Sie möchten, dass auch andere Systeme im Netzwerk darauf zugreifen können, sehen Sie sich netcat ( nc) an.

Für Python-Anwender gibt es Flask und für Perl-Programmierer Dancer2.

In C würden Sie socket, bindund verwenden listen.

Und wie @tom bemerkte: systemdhat nichts mit dem zu tun, wonach Sie fragen.

BEARBEITEN:

Ihr Zusatz

Ich möchte eine Möglichkeit, eine Verbindung zum Dienst herzustellen, die über keine URL und keine Portnummer verfügt.

macht es völlig unklar, wonach Sie suchen.

Wenn Sie mit einem Computer kommunizieren möchten, müssen Sie dessen Adresse kennen. Andernfalls werden Sie nie wissen, mit wem Sie kommunizieren. Ihre Datenbank und Ihr Client müssen außerdem ein vereinbartes Protokoll haben. Andernfalls verstehen sie sich nicht. Und damit haben Sie zwangsläufig eine URI.

Wenn Sie keine Portnummer verwenden möchten, wie dies bei TCP oder UDP der Fall ist, können Sie ein anderes Protokoll verwenden (https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml), wenn das für Sie in Ordnung ist. 253 oder 254 wären dann geeignet. Aber, und verstehen Sie das bitte nicht als Bevormundung, Sie scheinen noch nicht über die Fähigkeiten zu verfügen, dies zum Laufen zu bringen.

Wenn Sie Empfehlungen annehmen möchten, versuchen Sie zunächst, ein FIFO auf demselben System zu verwenden. Wenn das funktioniert, untersuchen Sie es in Netcat.

verwandte Informationen