2008-10-09 4 views
52

Linux 용 Mono C# 데몬을 쓰려고합니다.어떻게 Mono Daemon을 코딩합니까?

저는 프로세스를 죽이는 대신 처리가 끝났을 때 시작과 중지를하고 싶습니다.

누구에게도이 예제가 있습니까?

편집 : 나는 데비안에서 start-stop-daemon --background를 사용하는 방법을 알아 냈으므로 지금 당장 사용하겠다.

편집 : 나는 이것을 java에서 구현하고 있는데,이 멋진 addShutdownHook은 앱 종료를 포착한다. 모노 서비스의 종속성을 분류하거나 앱 종료를 잡는 방법을 찾으려면 조금 더 시간을 할애해야합니다.

거기 SessionEnd 이벤트이지만, 서비스에서만 사용할 수 이잖아 및 응용

콘솔하지

답 : 간단한 방법은 (로컬, 고) 포트에서 수신 대기하는 것 using mono-service to wrap a windows service on linux

+0

내가 너무 정말 대답은 이것에 무엇을보고 사랑을 참조하십시오. –

+0

모노 서비스 사용 오래된 garbade 수집가 whis 데비안에서 내 2.10 누수가 있습니다. 그래서 저는 cron을 mono-sgen과 함께 사용합니다. – ikutsin

답변

19

서비스를 구현하고 모노 서비스를 사용해야합니다. Google에 대한 몇 가지 예가 나와 있습니다.

+0

좋은 해결책처럼 들리 겠지만, 그것을 시도해 보겠습니다. –

+17

예제를 쉽게 찾으실 수 있으면 여기에 친절하게 링크하십시오. Google에 대한 언급은 시간이 지남에 따라 다소 불안정합니다. – fbmd

+0

콘솔 응용 프로그램을 작성하는 것이 더 쉽다는 것을 알았습니다. 리눅스에서 백그라운드로 응용 프로그램을 실행하는 것이 간단하기 때문에 "데몬"이됩니다. – markmnl

16

및 bind처럼 관리 클라이언트로부터 명령을받습니다.

더 많은 유닉스 쉐어가 register a signal handler 일 때 UnixSignal을 사용하고 특정 신호를 받으면 제대로 종료 될 수 있습니다. 주의 사항 및 예는 Mono FAQ, "Can I use signal handlers with Mono?"을 참조하십시오.

lupus은 인터페이스를 사용하는 호스팅 프로세스 인 mono-service입니다. 안타깝게도이 설정은 이어야하며 Mono의 일부 기능, 특히 프로세스 간 IPC 시스템을 사용할 수 없도록 설정해야합니다.

+0

나는 IPC가 부족하다는 사실을 잘 알고 있어야한다. –

4

Linux의 데몬은 일반적으로 kill 신호와 같은 신호를 수신하지만 소프트 재시작 (구성을 다시 읽음) 등과 같은 작업을 수행 할 수있는 다른 프로그램이 있습니다.

일반적으로 /etc/init.d 디렉토리의 스크립트는 이러한 데몬의 시작 및 중지를 제어합니다. 일반적으로/var/run 아래에 pid 파일이 생성되어 스크립트가 프로세스를 빨리 식별 할 수 있도록 프로세스 ID를 유지합니다.

Mono를 코딩 할 때조차도 Mono 프로세스 나 네이티브 프로세스 (예 : C에서 작성) 또는 스크립트간에 차이가 없기 때문에 코딩 환경에 대해 잘 이해할 수 있습니다.

데이브

0

미구엘 드 이카는 최근 쉽게 충분히 디먼 화 할 수 있어야 새로운 Mono C# interactive shell에 대해 썼다. Miguel은 다른 C# 응용 프로그램에 대화 형 셸을 포함시키는 방법을 보여주는 소스 코드가있는 follow-up article을 가지고 있습니다. 데몬의 좋은 출발점이 될 수 있습니다.

대화 형 셸에는 아직 출시되지 않은 Mono 버전 2.2가 필요합니다. 그러나 코드는 Mono's svn repository에서 사용할 수 있습니다.

+0

재미있는 방법이다. 나는이 제품을 프로덕션에 넣고 있는데, 출시 된 버전의 모노 만 사용하고있다. –

0

David가 맞습니다. 서비스를 중지하는 것은 UNIX 신호를 통해 이루어 지므로 신호 처리기를 사용하여이를 catch해야합니다.

25

신호를 사용하는 Unix 방식으로 알림을 받으려면 수신 할 계획 인 각 신호에 Mono.Unix.UnixSignal을 사용하고 신호 배열에서 UnixSignal.WaitAny()를 호출해야합니다.


일반적으로 별도의 스레드에서이 작업을 수행합니다.

0

대신 쉘 스크립트를 사용합니다. 그것은 내 모노 애플 리케이션을 시작하고 내 애플 리케이션이 종료 될 때 (의도적으로 또는 실수로), 내 앱이 설정 한 리턴 시그널을 살펴 본다. 이 스크립트를 사용하여 업데이트에서 복사, 다시 시작 또는 종료하도록 지시 할 수 있습니다. 내 응용 프로그램이 중단되면 신호가 반환되지 않으므로 스크립트에서 내 응용 프로그램을 다시 시작하고 콘솔 출력의 마지막 몇 줄을 전자 메일로 보냅니다.

나는 몇 달 전에 실패 검색, Windows like services development in LINUX using MONO?

관련 문제