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

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

좀 당황스러운 질문일 수도 있는데..

저는 최근에 도커를 가지고 놀기 시작했고 기본 램프 서버를 설정하려고 합니다.

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

그러나 Docker 컨테이너에서는 systemd/service를 통해 일반적으로 수행하는 방식으로 서비스를 시작할 수 없습니다.

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

/usr/sbin/httpd그렇다면 via가 아닌 via를 통해 httpd를 실행하는 것의 차이점은 무엇입니까 systemctl start httpd?

httpd를 중지하거나 다시 시작하는 '적절한' 방법이 있습니까? - 그냥 프로세스를 종료하면 될 줄 알았는데 약 10개의 아파치 프로세스가 실행되는 것 같습니다.

특별히 초점을 맞춘 질문은 아니지만 관련 자료에 대한 조언을 주시면 감사하겠습니다.

답변1

systemctlPID 1이 시스템화되지 않은 경우에는 사용할 수 없습니다 . 로 PID 1을 찾을 수 있습니다 ps -q 1.

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

답변2

systemd 서비스는 프로세스를 직접 실행하는 것과 비슷한 방식으로 프로세스를 시작하지만 모든 분기된 프로세스와 스레드를 추적합니다. 즉, systemctl stop apache모든 하위 프로세스가 종료된다는 의미입니다. 또한 systemd 프로세스를 사용하는 것은 백그라운드에서 실행되고 시스템 시작 시 시작될 수 있기 때문에 좋습니다.

답변3

학습 곡선에서 귀하의 위치를 ​​고려하면 귀하의 작업에 Docker를 사용하지 않을 것입니다.

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

또한 Docker를 사용하여 프로세스를 격리하려면 서로 다른 Docker 컨테이너에서 각 데이터베이스와 웹 서버를 실행해야 합니다.

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

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

Docker를 추가하면 어떤 이점이 있는지 확실히 이해하고 나면 systemdDocker를 함께 고려해보세요.

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

관련 정보