문제

저는 TCP 서버 등을 포함하는 Qt 애플리케이션을 개발했습니다.이제 Ubuntu 패키지를 만들고 시작 시 애플리케이션이 자동으로 시작되도록 하려고 합니다.

아무도 로그인하지 않은 경우에도 애플리케이션이 실행되어야 합니다. 이는 /etc/init.d/의 스크립트를 통해 데몬이 시작된 것을 의미합니다.

init.d 스크립트에서 시작 시 애플리케이션을 실행하고 중지 시 종료 신호를 보내려고 시도했지만 이는 애플리케이션이 포그라운드에서 실행되고 init-스크립트를 차단한다는 의미입니다.

다른 질문처럼 포크 거의 작동하는 것 같은데 TCP 서버를 시작하려고 하면 '알 수 없는 오류'가 발생합니다.그럼에도 불구하고 다양한 Linux 배포판에서 시작 시 백그라운드에서 내 애플리케이션을 실행하는 init-script를 작성하는 쉬운 방법이 있어야 합니다.

누구든지 나에게 올바른 방향을 알려줄 수 있습니까?

Qt 4.5와 함께 Ubuntu 9.10 사용

도움이 되었습니까?

해결책

귀하의 프로그램이 GUI 응용 프로그램입니까 아니면 GUI없이 작동합니까?

&를 사용하여 Init 스크립트 내에 배경하지 않는 이유는 무엇입니까?

다른 팁

가장 좋은 방법은 아마도 Qt서비스 포크 작업이 당신을 위해 처리되는 곳.

그러나 계속해서 자신만의 빌드를 만들고 싶다면 애플리케이션을 백그라운드로 실행하거나 다음을 통해 실행해야 합니다. 시작-중지-데몬 그것은 함께 제공됩니다 오픈RC 또는 배포판에 대한 유사한 유틸리티입니다.

또한 QtCore 공유 라이브러리에만 링크해야 합니다.응용 프로그램이 명령줄일 수 있고 GUI를 가져오지 않을 수도 있지만 이것이 응용 프로그램을 실행하는 데 X가 필요하지 않다는 의미는 아닙니다.예를 들어 단위 테스트 세트는 다음과 같습니다.

$ ldd runTests  | grep Qt
libQtTest.so.4 => /usr/lib/qt4/libQtTest.so.4 (0x00007fd424de9000)
libQtXml.so.4 => /usr/lib/qt4/libQtXml.so.4 (0x00007fd424baa000)
libQtGui.so.4 => /usr/lib/qt4/libQtGui.so.4 (0x00007fd4240db000)
libQtCore.so.4 => /usr/lib/qt4/libQtCore.so.4 (0x00007fd422644000)

QtGui가 존재하기 때문에 위 출력에서 ​​필터링되기는 하지만 모든 X 라이브러리도 가져옵니다.

기본 런 레벨에 따라 /etc의 RC? .D 디렉토리에 상징적 링크를 추가해야합니다. 또는 update-rc.d 스크립트를 사용하십시오. 먼저 응용 프로그램을 실행하는 /etc/init.d로 스크립트를 작성해야합니다. 둘째, update-rc.d 스크립트를 사용하여 시작할 필요한 파일을 추가하십시오.

update-rc.d 매뉴얼 페이지를 읽어서 수행하는 방법에 대한 정보를 찾을 수 있습니다.

$man update-rc.d

가장 간단한 방법은 애플리케이션 자체에 데몬 화 로직이없고 대신 헬퍼 프로그램을 사용하여 백그라운드에서 앱을 시작하고 PID를 관리하는 것입니다.

예를 들어, 스타트 프록.

이미 많은 스크립트를 살펴볼 수 있습니다. /etc/init.d 영감을 위해. 내가 본 것에서, 대부분의 표준 Linux 데몬은 startproc 시작하고 killproc 멈추기 위해.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top