2013-07-03 3 views
2

OS X Server에서 launchd 데몬을 시작하는 방법을 찾으려고합니다. 나는 특정 소켓 연결 (tcp 포트)을 듣기 위해 launchd 데몬을 설정할 수 있다는 것을 알아 냈다. (접속할 때) 스크립트를 실행한다. 필자는 모든 것을 성공적으로 완료했습니다. 예를 들어 텔넷으로 테스트 목적으로 소켓 연결을 열면 소켓 연결을 끊은 후에도 스크립트가 무기한 실행됩니다.OS X 소켓으로 시작

launchd에의 PLIST :

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Label</key> 
    <string>com.example.app</string> 
    <key>Program</key> 
    <string>/usr/bin/true</string> 
    <key>Sockets</key> 
    <dict> 
     <key>Listeners</key> 
     <dict> 
      <key>SockServiceName</key> 
      <string>1234</string> 
     </dict> 
    </dict> 
    <key>inetdCompatibility</key> 
    <dict> 
     <key>Wait</key> 
     <true/> 
    </dict> 
</dict> 
</plist> 

사람이 스크립트가 또 다시 호출되는 이유를 알고 있나요? 내 목표는 당신이 launchd에 이야기하고있는 inetdCompatibility 사전에 Wait = true을 지정하여

이 어떤 도움을 주시면 감사 ... 소켓 연결이 클라이언트에서 설정 될 때 스크립트를 한 번만 실행하도록 빈스

답변

3

입니다 당신의 응용 프로그램은 청취 소켓에서 accept을 호출하여 보류중인 연결 중 하나를 사용합니다. 그렇게하지 않으면 연결은 청취 소켓에 대기 상태로 남아있게되므로 launchd는 응용 프로그램이 수행 할 새로운 작업이 있다고 생각하게됩니다. 보류중인 연결을 사용하기 위해 launchd가 응용 프로그램에 accept을 호출하는지 확인하거나 Wait = false을 지정하면 launchd를 호출하여 accept을 호출 할 수 있습니다.

+0

대단히 감사합니다. bdash가 예상대로 작동합니다. – CRE8IT