"네트워크 프린터"로 전송될 데이터를 캡처하여 로컬에서 처리하거나 다른 시스템으로 전달할 수 있도록 하려고 합니다. 그것은 다음과 같습니다네트워크 프린터 장치로서의 Linux(Raw, 포트 9100)
내가 원하는 것을 하고 필요한 것만 할 것입니다:
9100 stream tcp nowait cat > some_file
하지만 내 Macbook에서 테스트할 수 있기를 원하지만 inetd
.
launchd
잠재적으로 OSX 의 대체품이므로 사용할 수 있지만 inetd
문서를 읽으면 위와 동등한 작업을 수행하는 방법이 명확하지 않습니다. 그래서 해결책, 즉 OSX를 얻는 방법 inetd
이나 그에 상응하는 작업을 수행하기 위한 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
. 이 경우 저장된 데이터의 출력 디렉터리는 해당 사용자가 쓸 수 있어야 하고 프로그램은 해당 사용자가 실행 가능하고 읽을 수도 있어야 합니다.