OSX에서 inetd 또는 이에 상응하는 launchd를 설치하고 실행하는 방법

OSX에서 inetd 또는 이에 상응하는 launchd를 설치하고 실행하는 방법

로컬에서 처리하거나 다른 시스템으로 전달할 수 있도록 "네트워크 프린터"로 전송된 데이터를 캡처하려고 합니다. 처럼 보인다네트워크 프린터 장치로서의 Linux(Raw, 포트 9100) 내가 원하고 필요한 것만 할 것입니다: 9100 stream tcp nowait cat > some_file 하지만 내 Macbook에서 테스트할 수 있기를 원했지만 그렇지 않습니다 inetd.

launchdOSX에서 대체하기 때문에 이것을 사용할 수도 있지만 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위와 같이 실행하지 않고도 도움이 될 수 있습니다 root. 이 경우 데이터가 저장되는 출력 디렉터리는 해당 사용자가 쓸 수 있어야 하고 프로그램 실행 파일(해당 사용자가 읽을 수도 있음)은 해당 사용자가 실행할 수 있어야 합니다.

관련 정보