저는 *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( daemon
도 killproc
) /etc/init.d/functions
과 Debian( ) 을 살펴보았습니다 start-stop-daemon
. 나는 파이프를 잘 다루지 않는다는 것을 배웠습니다. 이를 시작하는 것이 어떻게든 가능하더라도 이를 중지하면 심각한 문제가 발생합니다. 그래서 나는 작은 도구를 썼다.pipexec
. 이 프로그램은 일련의 프로그램을 시작하지만 하나의 프로그램처럼 동작합니다. 예: SIGTERM
a 가 전송 되면 pipexec
자신을 죽이기 전에 모든 자식을 죽입니다. 또한 pid 파일 처리도 지원합니다. 이를 통해 RHEL6 daemon
및 killproc
.
프로세스 간 통신을 처리하려면 FIFO/명명된 파이프를 사용해야 합니까? 그렇다면 이 두 프로세스를 백그라운드 작업으로 생성해야 합니까? 이게 안정적인가요?
나도 이것에 대해 생각해 보았지만 그것은 나에게 너무 복잡하고 fifos의 안정성과 신뢰성에 관해서는 좋은 경험이 없습니다. (아마 그것이 내 문제일지도 모르지만 나는 거의 사용하지 않습니다. ;-))
RHEL6과 통합하는 데 아무런 문제가 없습니다 pipexec
. 그냥 실행됩니다.
감사합니다 - 안드레아스