如何在 OSX 上安裝並執行 inetd 或 launchd 中的等效項

如何在 OSX 上安裝並執行 inetd 或 launchd 中的等效項

我正在嘗試捕獲發送到“網路印表機”的數據,以便可以在本地處理或轉發到另一個系統。看起來像Linux 作為網路印表機設備(Raw,連接埠 9100) 會做我想做的事情,並且只需要: 9100 stream tcp nowait cat > some_file 但我希望能夠在我的 Macbook 上測試它,但它沒有inetd.

我可能可以使用它launchd,因為它是 OSX 上的替代品inetd,但閱讀文件後,並不清楚如何執行與上述相同的操作。因此,無論是解決方案 - 如何獲取inetdOSX 或如何建立一個 plist 檔案來launchd執行相同的操作都是我正在尋找的。

答案1

現有的啟動XML檔/Library/LaunchDaemons還是/System/Library/LaunchDaemons值得研究的;來自其中之一並進行了一些探索/etc/services

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

人們可以將現有文件之一改編為我保存的文件/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是錯誤的測試腳本(如果客戶端每秒連接兩次或多次會發生什麼?):

$ 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可能有助於不執行上面的 as root,在這種情況下,已儲存的資料的輸出目錄必須可由該使用者寫入,且程式可由該使用者執行可執行檔(也可能是可讀的)。

相關內容