C 프로그램을 데몬으로 실행하는 방법은 무엇입니까?

C 프로그램을 데몬으로 실행하는 방법은 무엇입니까?

데몬으로 실행하고 싶은 C 프로그램이 있습니다. 저는 우분투 14.04LTS에서 일하고 있습니다. 어떤 접근 방식이 올바른가요? 누구든지 도와줄 수 있나요?

답변1

이제 우분투에 답이 있습니다.

올바른 방법은 Ubuntu 14와 함께 제공되는 데몬 관리자 아래에 있습니다. 여기서 다른 사람들이 데몬 역할을 하고 라이브러리 함수를 호출하는 프로그램을 명시적으로 설계하는 것에 대해 말한 것은 daemon()단순히 잘못된 것입니다. 아이러니하게도 Ubuntu는 세 가지 LTS 버전을 출시했습니다.이전에버전 14 LTS - 실제로는 2006년 Ubuntu 6.10부터 시작됩니다. 그 이후로 여러 종류의 데몬 관리자가 생겼습니다.

적절한 서비스 관리를 갖춘 사람의 정답은 다음과 같습니다.원하지 않는다daemon()당신에게 전화원하지 않는다"데몬이 되기" 위해 특별한 조치를 취하세요. 어떤 사람들에게는 이것이 1990년대 초반부터 정답이었습니다. 2006년에도 파티는 좀 늦은 것 같았다. ☺ 그럼에도 불구하고 지난 10년간 우분투에게는 이것이 정답이었습니다.

당신이 하는 일은 간단합니다. upstart에 프로그램 호출 시기와 방법을 알려주는 upstart "작업" 파일을 설정합니다. 신생이 그것을 부른다이미 악마화됐어, 제어 터미널이 없으며 예측 가능하고 변하지 않는 초기 프로세스 상태를 갖습니다. 귀하의 프로그램특별한 건 없어간단히 실행하여 로그와 오류 메시지를 일반적인 방법으로 표준 오류에 기록합니다. Upstart가 표준 오류에 대한 쓰기를 처리하는 방법을 작업 파일에서 정렬할 수 있습니다.

이것누보 리치 요리법시작 이벤트 및 로그 처리를 제어하는 ​​개별 섹션을 포함하여 이 모든 내용이 자세히 설명되어 있습니다. 여기와 AskUbuntu에는 이 주제에 대한 많은 콘텐츠가 있습니다.

나중에 Ubuntu 16 LTS로 업그레이드하면 세상이 극적으로 바뀔 것입니다. 하지만 그럼에도코드에서 특별한 작업을 수행하지 말고 데몬 관리자에서 실행하세요.여전히 정답이 될 것입니다.

추가 읽기

답변2

터미널에서 프로그램을 실행하는 데 문제가 있는 경우 다음과 같은 몇 가지 방법으로 문제를 해결할 수 있습니다. 프로그램은 사용자 입력을 요청해서는 안 됩니다.

  • 사용 nohup: nohup program > program.log 2>program.err &. 그런 다음 터미널을 종료할 수 있습니다.

  • atd서비스를 이용하려면 : echo "program > program.log 2>program.err" | at now
    또는 echo "program > program.log 2>program.err" | batch.

  • 시작 스크립트 역할을 합니다.

프로그램에 사용자 입력이 필요한 경우 터미널 외부에서 실행할 수 없습니다. screen또는 tux세션을 사용한 다음 터미널에서 분리하는 것이 좋습니다.

관련 정보