¿Cómo funcionan los servicios en Debian y cómo puedo administrarlos?

79

En Windows tengo el administrador de servicios, donde veo todos los servicios del sistema, que se pueden iniciar a través del propio Windows, configuro el usuario que usa, la administración de derechos está ahí y puedo pasar variables y otra información a los servicios , Puedo nombrarlos y puedo crear servicios duplicados de un programa, etc. Entonces tengo una herramienta de administración principal en Windows.

¿Cómo puedo hacer lo mismo en Linux? ¿Cómo puedo activar la ejecución de "svnserve" en el inicio o cómo puedo configurar los servicios para que se ejecuten en un contexto especial? ¿Cómo puedo ver todos los servicios "programados"?

Erdinc Ay
fuente
99
¿Qué distribución y versión estás usando? La gestión de servicios (los servicios casi siempre se llaman 'demonios' en el mundo Unix) solía ser fácil y semi-estándar. Las cosas son más variadas en estos días. Y no siempre es agradable. :) Además, ¿qué quieres decir con contexto ?
Alexios
Aunque parece que systemd está ganando lentamente la guerra del sistema init. Debian es la última gran reserva que todavía usa el antiguo SysVinit, y actualmente está en el proceso de determinar con qué sistema de inicio ir.
Patrick
1
Actualmente trabajo con Debian (última versión estable), y por contexto me refiero a variables de ruta o un contexto de usuario específico.
Erdinc Ay
1
Si solo necesita usar el servercomando en Debian, consulte unix.stackexchange.com/q/226089/130402
Peter Krauss el

Respuestas:

124

Actualmente hay 3 sistemas de inicio principales utilizados por Linux. Hace unos años, solo había uno, SysVinit. Pero SysVinit carecía seriamente de capacidades tales como gráficos de dependencia de servicios, por lo que ahora se ha desaprobado en la mayoría de las distribuciones. Actualmente, la mayoría de las distribuciones están cambiando a systemd . Aunque también hay advenedizo .

Pero aquí está la respuesta a su pregunta para cada uno de los 3 sistemas de inicio:

 

SysVinit

SysVinit actualmente utilizado por Debian y RedHat. Aunque la próxima versión de RedHat (7) usará systemd.

La forma universal de habilitar los servicios SysVinit en el arranque es vincularlos en /etc/rc3.d(o /etc/rc2.d). Todos los servicios se pueden encontrar en /etc/init.d. Sin embargo, tenga en cuenta que las distribuciones a menudo tendrán su propia herramienta para administrar estos archivos, y esa herramienta debería usarse en su lugar. (Fedora / RedHat tiene servicey chkconfig, ubuntu tiene update-rc.d)

Lista de servicios:

ls /etc/init.d/

Comienza el servicio:

/etc/init.d/{SERVICENAME} start

o

service {SERVICENAME} start

Parada de servicio:

/etc/init.d/{SERVICENAME} stop

o

service {SERVICENAME} stop

Habilitar servicio:

cd /etc/rc3.d
ln -s ../init.d/{SERVICENAME} S95{SERVICENAME}

( S95Se utiliza para especificar el orden. S01 comenzará antes que S02, etc.)

Deshabilitar servicio:

rm /etc/rc3.d/*{SERVICENAME}

 

Systemd

La distribución más notable que usa systemd es Fedora. Aunque es usado por muchos otros. Además, dado que Debian ha elegido ir con systemd sobre el arranque, se convertirá en el sistema de arranque de facto para la mayoría de las distribuciones (ubuntu ya ha anunciado que dejarán de funcionar para systemd).

Lista de servicios:

systemctl list-unit-files

Comienza el servicio:

systemctl start {SERVICENAME}

Parada de servicio:

systemctl stop {SERVICENAME}

Habilitar servicio:

systemctl enable {SERVICENAME}

Deshabilitar servicio:

systemctl disable {SERVICENAME}

 

Advenedizo

Upstart fue desarrollado por la gente de Ubuntu. Pero después de que debian decidiera usar systemd , Ubuntu anunció que se dejarían caer .

Upstart también fue utilizado brevemente por RedHat, ya que está presente en RHEL-6, pero no se usa comúnmente.

Lista de servicios:

initctl list

Comienza el servicio:

initctl start {SERVICENAME}

Parada de servicio:

initctl stop {SERVICENAME}

Habilitar servicio:

2 formas lamentablemente:

  1. Habrá un archivo /etc/default/{SERVICENAME}que contiene una línea ENABLED=.... Cambia esta línea a ENABLED=1.

  2. Habrá un archivo /etc/init/{SERVICENAME}.override. Asegúrese de que contiene start(o está ausente por completo), no manual.

Deshabilitar servicio:

echo manual > /etc/init/{SERVICENAME}.override

Nota: También existe el sistema de inicio 'OpenRC' que utiliza Gentoo. Actualmente, Gentoo es la única distribución que lo utiliza, y no se considera su uso, ni es compatible con ninguna otra distribución. Por lo tanto, no estoy cubriendo su uso (aunque si la opinión es que sí, puedo agregarlo).

Patricio
fuente
OpenRC es una especie de abstracción para SysVinit. No lo reemplaza, lo agrega.
Spidey
Gran redacción! Solo un par de correcciones menores: RHEL 6.x (y, por lo tanto, CentOS 6.xy el resto de derivados) usa el arranque, como Ubuntu (aunque la mayoría de los servicios todavía usan scripts SysV de todos modos). Además, agregaría que "chkconfig" (RH) y "update-rc.d" (Debian) son las formas "oficiales" de agregar enlaces a los directorios rc? .D.
rsuarez
@rsuarez buen punto sobre la cosa RHEL6. Aunque no parece mucho usarlo. La mayor parte del sistema todavía se ejecuta a través de SysVinit heredado (17 de arranque, 89 SysVinit en uno de mis sistemas RHEL6). Y chkconfigya update-rc.dse mencionan. Ver segundo párrafo bajo SysVinit :-)
Patrick
@Patrick está de acuerdo con el n. ° 1; "¡Uy!" en # 2 :-)
rsuarez
1
Gracias por la respuesta integral, ahora tengo el panorama general. Actualmente estoy usando Debian (la última versión estable), aquí en Europa de habla alemana tiene las mejores recomendaciones, pero tal vez probaré con Redhat.
Erdinc Ay
9

Las diferentes distribuciones utilizan diferentes mecanismos para administrar los servicios. El software para administrar servicios se llama init , después del nombre tradicional para el primer proceso (con ID de proceso 1) que se encarga de iniciar los demás.

Debian usa la variante tradicional SysVinit de init. Bajo este sistema, hay una colección de scripts en el directorio /etc/init(esta y otra ubicación pueden variar ligeramente entre las distribuciones que usan SysVinit). Estos scripts no se invocan directamente, sino a través de enlaces simbólicos en directorios /etc/rc?.d. Es la presencia y el nombre de estos enlaces simbólicos que determinan cuándo se inician los servicios. Para más detalles, lea el capítulo sobre init en la Referencia de Debian .

Eche un vistazo /etc/rc?.dpara ver qué servicios ya están presentes. La letra o dígito antes del punto es el nivel de ejecución; las entradas cuyo nombre comienza con Sse ejecutan con el argumento startal ingresar el nivel de ejecución, y las entradas cuyo nombre comienza con Kse ejecutan al salir del nivel de ejecución. La secuencia normal de nivel de ejecución es: S durante el arranque ( /etc/rcS.d/S*se ejecutan), luego 2 ( /etc/rc2.d/S*se ejecutan). En el momento del apagado, /etc/rc2.d/K*se ejecutan, luego el nivel de ejecución cambia a 0 (o 6 para un reinicio).

En pocas palabras, si desea crear un script de inicio para un nuevo servicio:

  • Escribe un script de shell en /etc/init.d. Este script debe aceptar un argumento que puede ser start, stop, force-reload, restart, o (opcional) reloado status. La diferencia entre reloady restartes restartequivalente a stopseguido por startwhile mientras reloadrecarga la configuración sin detener nada (si el servicio lo admite); force-reloadhace reloadsi está disponible y de lo restartcontrario. Consulte los archivos existentes y Hacer que los scripts se ejecuten en el momento del arranque con Debian para obtener ejemplos.
  • Ejecute update-rc.dpara crear enlaces simbólicos para iniciar y detener su servicio. La mayoría de los servicios se ejecutan en los niveles de ejecución 2, 3, 4 y 5.

Tenga en cuenta que para proporcionar acceso svn, puede ser más fácil configurar Apache y usar el protocolo HTTP o HTTPS. Esto tiene el beneficio adicional de permitir la exploración rápida del repositorio a través de un navegador web.

Gilles
fuente
2

Desde un fondo tradicional de Unix, los servicios no tienen nada de especial. Los servicios son solo procesos, pero con dos excepciones: no necesitan un terminal y comienzan en el arranque. cómo se inician en el arranque depende de init (que podría ser sysv init, bsd init, upstart, systemd u otra cosa; revise su página de manual para init) y si está utilizando un contenedor para la tarea o para la configuración de init. No hay nada que le impida ejecutar un servicio desde un terminal, de hecho, es común para fines de prueba.

hildred
fuente