2016-12-20 17 views
6

내가합니다 (인 TeamCity 에이전트를 RAM 디스크를 생성하고 시작) 다음을 수행 쉘 스크립트 startup.sh이 인 TeamCity 에이전트 떠들썩한 파티를 실행하지 ./startup.sh이며 올바르게 실행됩니다. launchd에서 실행하면 RAM 디스크 만 생성되고 teamcity는 시작되지 않습니다.launchd에 OSX는

내 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.datafinch.teamcity</string> 
     <key>Program</key> 
     <string>/Users/administrator/startup.sh</string> 
     <key>RunAtLoad</key> 
     <true/> 
    </dict> 
</plist> 

~/라이브러리/LaunchAgents에 있습니다? 다음 종료

https://gist.github.com/chriskooken/19f5856e3ce3c2322c53cb0afa69b057

+0

@andlrc 죄송합니다. 그것은 저의 마지막 시도였습니다. 질문을 업데이트했습니다. –

+0

'/ Users/administrator/buildAgent/bin/agent.sh'에있는 내용은 무엇입니까? –

+0

@MarkSetchell 질문에 해당 파일의 요지를 추가했습니다 –

답변

3

귀하의 agent.sh 스크립트는 백그라운드에서 인 TeamCity 에이전트를 실행하고 :

편집 여기

는 agent.sh 파일입니다. 이는 일자리를 관리하는 발사 방식에 위배됩니다. launchd는 작업을 포 그라운드에서 실행하고, 모니터 할 수 있으며, 충돌 할 경우 다시 시작하고, 적절할 때 종료하는 등의 작업을 기대합니다. 기본적으로 모든 작업은 PID 파일을 가지고 일하는 것은 launchd가 보통 당신을 보살펴주는 것입니다. 이 경우 직접적인 문제는 launchd의 작업 중 하나가 종료 될 때 (백그라운드에서 팀십이 실행 된 후 거의 즉시 수행되는 작업) launchd가 남은 모든 작업을 정리합니다. 은 고아가 된 하위 프로세스를 죽이는 것을 포함하여 말합니다. 팀 도시 직원.

  • 이 일을의 launchd에 방법으로 변환 :

    당신은 두 가지 선택이있다. 이것은 agent.sh 스크립트를 선행 조건 검사, Java 찾기 등과 같은 작업을 수행 한 후 대체합니다. 에서 에이전트를 실행합니다. 사실, 에이전트가 exec 인 경우 에이전트가 가장 좋을 것이므로 에이전트는 쉘 (launchd의 하위 항목)이 아닌 launchd의 하위 항목으로 직접 실행됩니다. 이것은 launchd에게 모니터하고 관리하기위한보다 직접적인 연결을 제공합니다.

  • launchd에 .plist에 을 추가하여 버려진 서브 프로세스를 중지하지 않도록 지정합니다. 이것은 간단하지만 launchd의 다른 모든 관리 기능에서 빠져 나옵니다.
+0

이것은 완벽하게 작동했습니다. 나는 지금 AbandonProcessGroup을 사용했다. 감사! –