OSX に inetd をインストールして実行する方法、または launchd で同等のものをインストールする方法

OSX に inetd をインストールして実行する方法、または launchd で同等のものをインストールする方法

私は「ネットワークプリンタ」宛てのデータをキャプチャして、ローカルで処理したり、別のシステムに転送したりしようとしています。ネットワーク プリンタ デバイスとしての Linux (Raw、ポート 9100) 私が望むことを実行し、必要なものは次のとおりです。 9100 stream tcp nowait cat > some_file ただし、Macbook でテストできるようにしたいのですが、Macbook には がありませんinetd

launchd潜在的には、OSXの の代替として を使用できますinetdが、ドキュメントを読んでも、上記と同等のことを実行する方法が明確ではありません。したがって、inetdOSX で を取得する方法、または同等のことを実行する の plist ファイルを作成する方法のいずれかの解決策launchdが、私が探しているものです。

答え1

既存の起動XMLファイルは/Library/LaunchDaemons/System/Library/LaunchDaemons研究に値する。これらのうちの1つから、いくつかのgrepで/etc/services

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

既存のファイルの1つを私が保存したものに適応させるかもしれません/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>

悪いテスト スクリプトはここにあります/var/root/cattery(クライアントが 1 秒間に 2 回以上接続すると何が起こるでしょうか)。

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

そして新しいサービスを有効にします

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

そしてテストデータを入力します

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

注意:このコードはおそらく として実行されるべきではないでしょうroot

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

に見られるような行は、/System/Library/LaunchDaemons/org.cups.cups-lpd.plist上記を として実行しないようにするのに役立つかもしれませんroot。その場合、保存されたデータの出力ディレクトリはそのユーザーによって書き込み可能である必要があり、プログラムはそのユーザーによって実行可能(そしておそらく読み取り可能)に実行される必要があります。

関連情報