So installieren und führen Sie inetd unter OSX oder das Äquivalent in launchd aus

So installieren und führen Sie inetd unter OSX oder das Äquivalent in launchd aus

Ich versuche, die für einen „vernetzten Drucker“ bestimmten Daten zu erfassen, damit sie lokal verarbeitet oder an ein anderes System weitergeleitet werden können. Es sieht so ausLinux als Netzwerkdruckergerät (Raw, Port 9100) tut, was ich will und erfordert nur: 9100 stream tcp nowait cat > some_file aber ich möchte es auf meinem Macbook testen können und das hat nicht inetd.

Ich könnte es möglicherweise verwenden, launchdda es der Ersatz für inetdOSX ist, aber wenn man die Dokumentation liest, ist nicht klar, wie man das Äquivalent zum obigen erreicht. Also suche ich nach einer der beiden Lösungen – wie man es inetdfür OSX bekommt oder wie man eine plist-Datei erstellt, die das Äquivalent erreicht.launchd

Antwort1

Die vorhandenen Start-XML-Dateien in /Library/LaunchDaemonsoder /System/Library/LaunchDaemonsverdienen Studium; von einem dieser und mit etwas grepping über in/etc/services

$ grep 9100 /etc/services
hp-pdl-datastr  9100/udp     # PDL Data Streaming Port
hp-pdl-datastr  9100/tcp     # PDL Data Streaming Port

man könnte eine der vorhandenen Dateien an das anpassen, was ich gespeichert habe/Library/LaunchDaemons/cattery.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>com.exampe.cattery</string>
    <key>ProgramArguments</key>
    <array>
        <string>/var/root/cattery</string>
    </array>
    <key>inetdCompatibility</key>
    <dict>
        <key>Wait</key>
        <false/>
    </dict>
    <key>InitGroups</key>
    <true/>
    <key>Sockets</key>
    <dict>
        <key>Listeners</key>
        <dict>
            <key>SockServiceName</key>
            <string>hp-pdl-datastr</string>
            <key>SockType</key>
            <string>stream</string>
        </dict>
    </dict>
</dict>
</plist>

Hier /var/root/catteryist das fehlerhafte Testskript (was passiert, wenn Clients sich zwei oder mehr Mal pro Sekunde verbinden?):

$ sudo cat /var/root/cattery
#!/bin/sh
cat > "/var/root/out.$(date +%s)"
$ sudo chmod +x /var/root/cattery

Und dann aktivieren wir unseren neuen Service

$ sudo launchctl load -w /Library/LaunchDaemons/cattery.plist

Und geben Sie ihm einige Testdaten

$ echo foo | nc localhost 9100
$ sudo find /var/root -name out\* -maxdepth 1
/var/root/out.1511845970
$ sudo cat /var/root/out.1511845970
foo
$ 

HINWEIS: Dieser Code sollte wahrscheinlich nicht als ausgeführt werden root.

    <key>UserName</key>
    <string>_lp</string>

Zeile wie in /System/Library/LaunchDaemons/org.cups.cups-lpd.plistkann dazu beitragen, das Obige nicht als auszuführen. rootIn diesem Fall muss das Ausgabeverzeichnis für die gespeicherten Daten für diesen Benutzer beschreibbar und das ausgeführte Programm für diesen Benutzer ausführbar (und möglicherweise auch lesbar) sein.

verwandte Informationen