Ejecutar un programa como servicio o directamente, ¿cuál es la diferencia?

Ejecutar un programa como servicio o directamente, ¿cuál es la diferencia?

Esta puede ser una pregunta un poco confusa...

Recientemente comencé a jugar con Docker y estoy intentando configurar un servidor de lámpara básico.

Tengo una imagen acoplable de centos con httpd, php y mysql.

Sin embargo, en un contenedor acoplable no puedo iniciar servicios como lo haría normalmente a través de systemd/service.

Puedo ejecutar httpd directamente a través de/usr/sbin/httpd

Entonces, ¿qué diferencia hay entre ejecutar httpd vía /usr/sbin/httpden lugar de vía systemctl start httpd?

¿Existe una forma "adecuada" de detener o reiniciar httpd? - Pensé que podría simplemente finalizar el proceso, pero parece iniciar unos 10 procesos de Apache.

Aprecio que esta no sea una pregunta particularmente bien enfocada, pero cualquier sugerencia sobre material relevante será recibida con gratitud.

Respuesta1

No puede usarlo systemctlsi su PID 1 no es systemd. Puede encontrar su PID 1 con ps -q 1.

Poder iniciar y detener servicios de forma normal es una de las ventajas mencionadas en este artículo sobreEjecutando systemd en un contenedor sin privilegios. Otros registran o rastrean procesos secundarios como se describe en la respuesta de Andrei.

Respuesta2

Un servicio systemd iniciará el proceso de manera similar a ejecutarlo directamente, sin embargo, realizará un seguimiento de todos los procesos y subprocesos bifurcados. Esto significa que cuando systemctl stop apachecierre todos los procesos secundarios. También es bueno usar procesos systemd porque se ejecutarán en segundo plano y se pueden iniciar al iniciar el sistema.

Respuesta3

Teniendo en cuenta su ubicación en la curva de aprendizaje, no usaría Docker para su tarea.

Si está utilizando Docker para aislar procesos, puede usar usuarios únicos de Unix para eso, o systemd también incluye directivas para limitar a qué puede acceder un servicio systemd. Véase por ejemplo Capabilities=en man systemd.exec.

Además, para el aislamiento de procesos con Docker, ejecutaría cada una de las bases de datos y el servidor web en diferentes contenedores Docker.

Otra característica importante que systemdofrece es la gestión de procesos. Es decir, si su httpdproceso falla, systemd lo reiniciará por usted.

Mi recomendación es primero ejecutar todos los procesos directamente en un servidor host usando systemd. Muchos paquetes modernos systemdya vienen con archivos de configuración.

Una vez que comprenda bien y systemdtenga claro qué beneficio proporcionará agregar Docker, considere Docker a la mezcla.

En mi trabajo, intentamos usar Docker para administrar un conjunto de servicios, pero luego acostumbramos a administrarlos directamente systemdy el resultado es un sistema más limpio que el equipo prefiere con menos bashscripts para unir las cosas y mantenerlas.

información relacionada