프로그램을 서비스로 실행하는 것과 직접 실행하는 것의 차이점은 무엇입니까?

프로그램을 서비스로 실행하는 것과 직접 실행하는 것의 차이점은 무엇입니까?

좀 헷갈릴 수 있는 질문인데..

저는 최근에 도커를 사용하기 시작했고 기본 램프 서버를 설정하려고 했습니다.

httpd, php 및 mysql이 포함된 centos docker 이미지가 있습니다.

그러나 docker 컨테이너에서는 systemd/service를 통해 평소처럼 서비스를 시작할 수 없습니다.

다음을 통해 httpd를 직접 실행할 수 있습니다./usr/sbin/httpd

그렇다면 httpd via 와 via /usr/sbin/httpd의 차이점은 무엇입니까 systemctl start httpd?

httpd를 중지하거나 다시 시작하는 "올바른" 방법이 있습니까? - 프로세스를 죽일 수 있을 줄 알았는데 아파치 프로세스가 10개 정도 시작되는 것 같습니다.

나는 이것이 특별히 초점을 맞춘 질문이 아니라는 것을 알고 있지만 관련 자료에 대한 조언을 주시면 대단히 감사하겠습니다.

답변1

systemctlPID 1이 시스템화되어 있지 않으면 작동하지 않습니다. 1 을 사용하여 PID를 찾을 수 있습니다 ps -q 1.

일반적인 방법으로 서비스를 시작하고 중지할 수 있다는 것이 이 기사에서 언급한 장점입니다.권한이 없는 컨테이너에서 systemd 실행. Andre의 답변에서 언급한 것처럼 다른 사람들은 하위 프로세스를 로깅하거나 추적하고 있습니다.

답변2

systemd 서비스는 직접 실행하는 것과 유사한 방식으로 프로세스를 시작하지만 모든 분기된 프로세스와 스레드를 추적합니다. 이는 systemctl stop apache모든 하위 프로세스를 닫으면 종료된다는 의미입니다. systemd 프로세스를 사용하는 것도 백그라운드에서 실행되고 시스템 부팅 시 시작될 수 있으므로 좋습니다.

답변3

귀하가 학습 곡선의 어느 위치에 있는지 고려할 때 저는 귀하의 작업에 Docker를 사용하지 않을 것입니다.

프로세스 격리를 위해 Docker를 사용하는 경우 이를 위해 고유한 Unix 사용자를 사용할 수 있습니다. 또는 systemd에는 systemd 서비스가 액세스할 수 있는 대상을 제한하는 지시문도 포함되어 있습니다. 예를 들어 를 Capabilities=참조하십시오 man systemd.exec.

또한 Docker를 사용한 프로세스 격리를 위해 각 데이터베이스와 웹 서버를 다른 Docker 컨테이너에서 실행할 수 있습니다.

제공되는 또 다른 중요한 기능은 systemd프로세스 관리입니다. 즉, httpd프로세스가 충돌하면 systemd가 프로세스를 다시 시작합니다.

내 제안은 먼저 systemd를 사용하여 모든 프로세스가 호스트 서버에서 직접 실행되도록 하는 것입니다. 많은 최신 소프트웨어 패키지에는 systemd이미 구성 파일이 함께 제공됩니다.

Docker를 추가하면 어떤 이점이 있는지 잘 이해 systemd하고 명확해지면 Docker를 혼합에 추가하는 것을 고려할 수 있습니다.

내 직장에서는 Docker를 사용하여 일련의 서비스를 관리하려고 시도했지만 직접 관리하는 데 익숙해졌고 systemd그 결과 팀에서 더 적은 수의 bash스크립트를 사용하여 여러 가지를 하나로 묶고 유지 관리하는 것을 선호하는 깔끔한 시스템이 되었습니다.

관련 정보