So legen Sie einen UNIX-Domain-Socket direkt über TCP offen


13

Ich hätte gerne einen UNIX-Domain-Socket, zum Beispiel /var/program/program.cmd, der über TCP verfügbar gemacht wird, zum Beispiel auf Port 12345. Ich möchte auch, dass dieser ganztägig im Hintergrund ausgeführt wird.

Wie geht das am besten? Wenn es relevant ist, läuft auf dem System Ubuntu 12.04.2.

Übersteht es mit der vorgeschlagenen Lösung auch, wenn der Domain-Socket entfernt und neu erstellt wird?

BEARBEITEN

Hier ist das Ergebnis der akzeptierten Antwort in Form eines Init-Skripts: https://github.com/Wirehive/haproxy-remote

Antworten:


18

Sie können socatIhren Unix-Socket als TCP-Socket exportieren. Hier ist der Befehl dazu:

socat TCP-LISTEN:12345 UNIX-CONNECT:/var/program/program.cmd

Dadurch wird ein TCP-Socket erstellt, der den Port 12345 überwacht und eine Verbindung zum erwähnten Unix-Socket Ihres Programms herstellt.

Für das Löschproblem habe ich es nicht selbst getestet. Sie können es überprüfen und uns darüber erzählen :)

Hinweis: Möglicherweise finden Sie socat nicht installiert. Sie müssen nur Folgendes eingeben:, apt-get install socatum es zu installieren.


1
Danke, das hat ziemlich gut funktioniert, obwohl es nach jeder Kommunikation beendet wurde. Nach dem Spielen um Ich habe mit gutem Erfolg: socat TCP-LISTEN:12345,reuseaddr,fork,su=haproxy UNIX-CLIENT:/var/program/program.cmd. Die Frage ist nur, wie ich es im Hintergrund zum Laufen bringe.
SimonJGreen

@SimonJGreen: Da dies kein interaktiver Befehl ist, für den Eingaben erforderlich sind, können Sie einfach versuchen, ihn &am Ende des Befehls anzufügen .
Khaled

OK, ich lief mit dem Vorschlag und schrieb ein Init-Skript, um damit umzugehen. Hier ist das Ergebnis für alle Interessierten! github.com/Wirehive/haproxy-remote
SimonJGreen

@alexandermensa Pflege zu erarbeiten?
Eduardo Bezerra
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.