프로세스가 자체적으로 데몬화할 수 없는 경우 init 스크립트에서 백그라운드 작업을 생성하는 것이 좋은 방법입니까?

프로세스가 자체적으로 데몬화할 수 없는 경우 init 스크립트에서 백그라운드 작업을 생성하는 것이 좋은 방법입니까?

저는 *nix를 처음 접했고 100% 실행되어야 하는 여러 프로세스를 제거해야 하는 상황에 처해 있었습니다. 백그라운드에서 사용하십시오 &.

이를 수행하기 위해 init.d 스크립트에서 다음 줄을 사용합니다(user로 실행 user:

su -c 'process arg1 arg2 -w - | process2 arg1 -r - &' user

(-w는 STDOUT, STDIN을 쓰고, -r은 STDOUT, STDIN을 읽습니다)

특히 이러한 프로세스는 외부 영향으로부터 잘 보호되지 않기 때문에 일반적으로 허용되지 않는 것으로 알고 있습니다.

"서비스"에 대한 백그라운드 작업을 생성하는 것이 허용됩니까?

프로세스 간 통신을 처리하려면 FIFO/명명된 파이프를 사용해야 합니까?

그렇다면 이 두 프로세스를 백그라운드 작업으로 생성해야 합니까? 이게 안정적인가요?

자세한 내용은 다음을 참조하세요.이 메일링 리스트 주제.

감사해요,

매트

답변1

특히 이러한 프로세스는 외부 영향으로부터 잘 보호되지 않기 때문에 일반적으로 허용되지 않는 것으로 알고 있습니다.

"서비스"에 대한 백그라운드 작업을 생성하는 것이 허용됩니까?

다른 방법이 없다면(즉, 서비스가 자체적으로 포크되지 않는 경우) 아마도 그렇습니다. 데비안에는 이 상황에 대한 매개변수가 start-stop-daemon있습니다 :--background

   -b, --background
          Typically used with programs that don't  detach  on  their  own.
          This option will force start-stop-daemon to fork before starting
          the  process,  and  force  it  into  the  background.   WARNING:
          start-stop-daemon  cannot  check  the exit status if the process
          fails to execute for any reason. This is a last resort,  and  is
          only  meant  for  programs  that either make no sense forking on
          their own, or where it's not feasible to add the code  for  them
          to do this themselves.

답변2

첫 번째 질문에 대한 답변이 완료되었으므로 마지막 두 가지 질문에 집중하겠습니다.

며칠 전 나는 비슷한 문제에 직면했습니다. /etc/init.d스크립트의 파이프를 통해 일부 프로세스를 시작해야 했습니다. 이 문제를 해결하기 위해 RHEL6( daemonkillproc) /etc/init.d/functions과 Debian( ) 을 살펴보았습니다 start-stop-daemon. 나는 파이프를 잘 다루지 않는다는 것을 배웠습니다. 이를 시작하는 것이 어떻게든 가능하더라도 이를 중지하면 심각한 문제가 발생합니다. 그래서 나는 작은 도구를 썼다.pipexec. 이 프로그램은 일련의 프로그램을 시작하지만 하나의 프로그램처럼 동작합니다. 예: SIGTERMa 가 전송 되면 pipexec자신을 죽이기 전에 모든 자식을 죽입니다. 또한 pid 파일 처리도 지원합니다. 이를 통해 RHEL6 daemonkillproc.

프로세스 간 통신을 처리하려면 FIFO/명명된 파이프를 사용해야 합니까? 그렇다면 이 두 프로세스를 백그라운드 작업으로 생성해야 합니까? 이게 안정적인가요?

나도 이것에 대해 생각해 보았지만 그것은 나에게 너무 복잡하고 fifos의 안정성과 신뢰성에 관해서는 좋은 경험이 없습니다. (아마 그것이 내 문제일지도 모르지만 나는 거의 사용하지 않습니다. ;-))

RHEL6과 통합하는 데 아무런 문제가 없습니다 pipexec. 그냥 실행됩니다.

감사합니다 - 안드레아스

관련 정보