Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Gestión de servicios.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2014 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Introducción.

La gestión de servicios consiste en activar o desactivar servicios en los distintos niveles de ejecución del sistema y en iniciar, detener o activar éstos cuando las circunstancias lo requieran. Este documento describe los procedimientos correspondientes en CentOS, Fedora™, Red Hat™ Enterprise Linux, openSUSE™ y SUSE™ Linux Enterprise.

Niveles de ejecución.

GNU/Linux tiene 7 niveles de ejecución:

  • 0: Apaga el sistema.
  • 1 o S: Nivel mono-usuario.
  • 2: Multi-usuario, sin unidades de almacenamiento remoto o sin conexión de red.
  • 3: Multi-usuario, con unidades de almacenamiento remoto.
  • 4: Experimental.
  • 5: Multi-usuario con servidor de video.
  • 6: Reinicia sistema.

Los servicios del sistema utilizan los niveles de ejecución 2, 3, 4 y 5. Los niveles de ejecución 0, 1 y 6 están reservados para los usos descritos arriba.

Para verificar el nivel de ejecución predeterminado del sistema, puede consultarse el contenido del archivo /etc/inittab, ejecutando lo siguiente:

cat /etc/inittab |grep initdefault |grep id

Lo anterior debe devolver algo similar a lo siguiente:

id:5:initdefault:

Lo anterior indica que el nivel de ejecución predeterminado del sistema es el 5. Para cambiar el valor del nivel de ejecución predeterminado, sólo es necesario editar como root el archivo /etc/inittab:

vim /etc/inittab

Y reemplazar el número que esté establecido, por el de cualquier otro nivel de ejecución deseado, entre 1 y 5. ¡Jamás se debe establecer 0 (apagar) o 6 (reiniciar)!

Para que surta efecto el cambio, se reinicia el sistema, el cual deberá utilizar, de modo predeterminado, el nivel de ejecución especificado en el archivo /etc/inittab.

También es posible iniciar el sistema en cualquier nivel de ejecución distinto al definido en el archivo /etc/inittab, sin necesidad de modificar archivo alguno, añadiendo el número correspondiente como argumento de arranque del núcleo desde el gestor de arranque del sistema.

Inicio en nivel de ejecución 3 desde el gestor de arranque de CentOS 6.
Inicio en nivel de ejecución 3 desde el gestor de arranque de CentOS 6.

Inicio en nivel de ejecución 3 desde el gestor de arranque de openSUSE 11.
Inicio en nivel de ejecución 3 desde el gestor de arranque de openSUSE™ 11.

Ejecute runlevel para verificar el nivel de ejecución actual:

runlevel

Cuando la salida devuelve la letra N mayúscula y un número, significa que el sistema inició en ese nivel de ejecución y que es inexistente un nivel de ejecución previo. En el siguiente ejemplo de salida, se indica que el sistema está en el nivel de ejecución 5, sin niveles de ejecución previos:

N 5

Cuando la salida de runlevel es de dos números, el primer número corresponde al nivel de ejecución previo y el segundo corresponde al nivel de ejecución actual. En el siguiente ejemplo, se indica que el sistema está en el nivel de ejecución 5 y que anteriormente se estaba en el nivel de ejecución 3:

3 5

Ejecute who con la opción -r para obtener un poco más de detalle:

who -r

En el siguiente ejemplo, la salida muestra que el nivel de ejecución es el 5 y que el último nivel de ejecución fue el 3.

     run-level 5  Jun 27 17:09          last=3

Ejecute init utilizando como argumento el número de nivel al que se desea cambiar para conmutar, lo cual se encargará de iniciar o terminar los servicios que sean necesarios. En el siguiente ejemplo se conmuta al nivel de ejecución 1:

init 1

En el siguiente ejemplo, se conmuta al nivel de ejecución 3:

init 3

En el siguiente ejemplo, se conmuta al nivel de ejecución 6, el cual reinicia el sistema:

init 6

En el siguiente ejemplo, se conmuta al nivel de ejecución 0 —el cual apaga el sistema:

init 0

Utilice telinit para conmutar el nivel de ejecución indicando a init cuánto esperará entre los envíos a los procesos de las señales SIGTERM y SIGKILL. De modo predeterminado son 5 segundos y con la opción -t se puede establecer un valor distinto en segundos.

Cada uno de los niveles de ejecución dispone de un sub-directorio dentro del directorio /etc. En el caso de CentOS, Fedora™ y Red Hat™ Enterprise Linux, se utilizan los siguientes directorios:

  • /etc/rc.d/rc0.d
  • /etc/rc.d/rc1.d
  • /etc/rc.d/rc2.d
  • /etc/rc.d/rc3.d
  • /etc/rc.d/rc4.d
  • /etc/rc.d/rc5.d
  • /etc/rc.d/rc6.d

En el caso de openSUSE™ y SUSE™ Linux Enteprise, también existen estas mismas rutas, pero son enlaces simbólicos de los siguientes directorios, pudiendo trabajarse con unos u otros de manera indistinta:

  • /etc/init.d/rc0.d
  • /etc/init.d/rc1.d
  • /etc/init.d/rc2.d
  • /etc/init.d/rc3.d
  • /etc/init.d/rc4.d
  • /etc/init.d/rc5.d
  • /etc/init.d/rc6.d

Cada uno de estos directorios incluye enlaces simbólicos que apuntan hacia los guiones de arranque de los servicios, los cuales están dentro del directorio /etc/init.d/. Hay dos tipos de enlaces, los que inician el servicio y los que terminan el servicio. Ambos tipos de enlaces incluyen un número que determina la prioridad de inicio o de terminación de un servicio respecto de otros servicios en el sistema.

Liste el contenido del directorio /etc/rc.d/rc3.d ejecutando lo siguiente:

ls /etc/rc.d/rc3.d

El siguiente ejemplo es una muestra de lo que podría contener el directorio /etc/rc.d/rc3.d:

K01avahi-dnsconfd   K69rpcsvcgssd      K87rpcbind       S23NetworkManager
K10saslauthd        K72autofs          K88iscsi         S24avahi-daemon
K10zvbid            K73slapd           K89iscsid        S24nslcd
K15atd              K73ypbind          K89rdisc         S25cups
K30sendmail         K74nscd            K90network       S25netfs
K30vboxweb-service  K75ntpdate         K92ip6tables     S26haldaemon
K35nmb              K80fcoe            K92iptables      S50bluetooth
K35smb              K80lldpad          K95firstboot     S58ntpd
K36xrdp             K83nfslock         S02lvm2-monitor  S60vsftpd
K50dnsmasq          K83rpcgssd         S11portreserve   S90crond
K50netconsole       K83rpcidmapd       S12rsyslog       S95atd
K50snmpd            K84wpa_supplicant  S13cpuspeed      S99rc-local
K50snmptrapd        K87multipathd      S15mdmonitor
K60nfs              K87restorecond     S22messagebus

Un servicio que tenga un enlace simbólico denominado S80algo, significa que el servicio iniciará después de todos los demás servicios que tengan un número menor. Es decir, S80algo iniciará después de S70otro.

Un servicio que tenga un enlace simbólico denominado K30algo, significa que el servicio terminará antes que todos los demás servicios que tengan un número mayor. Es decir, K30algo terminará primero que K40otro.

Para que un servicio esté activo, debe tener un enlace simbólico denominado S[nnX] (donde S significa Start, nn es el número de prioridad, que puede ir de 00 a 99 y X el nombre del servicio) dentro de los directorios de los niveles de ejecución 2, 3, 4 y 5. Estos enlaces simbólicos se acompañan de un enlace K[nnX] en los niveles de ejecución 0, 1, 6 y aquellos donde el servicio esté desactivado, para poder terminar normalmente el servicio involucrado.

Para que un servicio esté inactivo, debe tener un enlace simbólico denominado K[nnX] (donde K significa Kill, nn es el número de prioridad, que puede ir de 00 a 99 y X el nombre del servicio) dentro de los directorios de los niveles de ejecución 2, 3, 4 y 5 y deben estar ausentes los enlaces denominados S[nnX].

Todas las distribuciones de GNU/Linux funcionan de este modo.

La ausencia de los enlaces simbólicos de inicio, aquellos cuyo nombre inicia con S mayúscula, en alguno de los directorios que corresponden a los niveles de ejecución, significa que dicho servicio está inhabilitado en ese nivel de ejecución. La presencia de un enlace simbólico de terminación, aquellos cuyo nombre inicia con K mayúscula, en cualquiera de niveles de ejecución (generalmente, al menos 0, 1 y 6), significa que el servicio está desactivado. Por ejemplo, si se tiene el servicio sshd y éste tiene los siguientes enlaces:

/etc/rc.d/rc0.d/K25sshd
/etc/rc.d/rc1.d/K25sshd
/etc/rc.d/rc2.d/S55sshd
/etc/rc.d/rc3.d/S55sshd
/etc/rc.d/rc4.d/S55sshd
/etc/rc.d/rc5.d/S55sshd
/etc/rc.d/rc6.d/K25sshd

Lo anterior significaría que el servicio sshd está habilitado en los niveles de ejecución 2, 3, 4 y 5 y que se termina al conmutar a los niveles de ejecución 0, 1 y 6.

Si se tuviera el siguiente escenario:

/etc/rc.d/rc0.d/K25sshd
/etc/rc.d/rc1.d/K25sshd
/etc/rc.d/rc2.d/K25sshd
/etc/rc.d/rc3.d/S55sshd
/etc/rc.d/rc4.d/K25sshd
/etc/rc.d/rc5.d/S55sshd
/etc/rc.d/rc6.d/K25sshd

Lo anterior significaría que el servicio sshd sólo estaría activo en los niveles de ejecución 3 y 5. Si se conmuta a cualquier otro nivel (0, 1, 2, 4 o 6), el servicio es detenido por el sistema. Si por ejemplo se estuviese trabajando en el nivel de ejecución 5 y se conmuta al nivel de ejecución 3, el servicio seguiría funcionando sin ser afectado. Si en cambio se está en el nivel de ejecución 5 y se conmuta al nivel de ejecución 2, donde hay un enlace de terminación de servicio, el servicio es detenido.

Si se tuviera el siguiente escenario:

/etc/rc.d/rc0.d/K25sshd
/etc/rc.d/rc1.d/K25sshd
/etc/rc.d/rc2.d/S55sshd
/etc/rc.d/rc3.d/K25sshd
/etc/rc.d/rc3.d/S55sshd
/etc/rc.d/rc4.d/K25sshd
/etc/rc.d/rc5.d/K25sshd
/etc/rc.d/rc5.d/S55sshd
/etc/rc.d/rc6.d/K25sshd

Lo anterior significaría que el servicio sshd sería reiniciado si se conmuta hacia los niveles 3 o 5, pues existen tanto los enlaces de inicio como los de terminación en los directorios de los niveles de ejecución 3 y 5. Conmutar hacia cualquier otro nivel de ejecución detendría el servicio.

Si se tuviera el siguiente escenario:

/etc/rc.d/rc0.d/K25sshd
/etc/rc.d/rc1.d/K25sshd
/etc/rc.d/rc2.d/S55sshd
/etc/rc.d/rc3.d/K25sshd
/etc/rc.d/rc3.d/S55sshd
/etc/rc.d/rc4.d/K25sshd
/etc/rc.d/rc5.d/S55sshd
/etc/rc.d/rc6.d/K25sshd

Conmutar desde el nivel de ejecución 5 hacia el nivel de ejecución 3 reiniciaría el servicio. Conmutar desde el nivel de ejecución 3 hacia el nivel de ejecución 5, tendría nulo efecto sobre el servicio, a menos que el servicio sshd hubiese sido detenido previamente, en cuyo caso hubiese sido iniciado.

Cada archivo de inicio de servicio, que se encuentran dentro del directorio /etc/init.d/, incluye como mínimo la siguiente información, comentada con almohadillas:

#Interprete de mandatos utilizado
#
#nombre del servicio       Descripción breve del servicio
#
#chkconfig: niveles de ejecución en los que estás activo el servicio y
#           los números de prioridad de inicio y terminación, respectivamente,
#           con los que serán creados los enlaces simbólicos en cada nivel
#           de ejecución.
#
#description: Descripción detallada del servicio.

### BEGIN INIT INFO
# Provides: componentes que son provistos por el servicio
# Required-Start: requisitos para iniciar el servicio
# Required-Stop: requisitos para detener el servicio
# Default-Start:  niveles de ejecución en los que está activo el servicio
# Default-Stop: niveles de ejecución en los que está inhabilitado el servicio.
# Description: Descripción detallada del servicio.
### END INIT INFO

El siguiente ejemplo muestra la información del archivo de inicio del servicio sshd:

#!/bin/sh
#
# sshd          Start up the OpenSSH server daemon.
#
# chkconfig: 2345 55 25
# description: SSH is a protocol for secure remote shell access. 
#              This service starts up the OpenSSH server daemon.

### BEGIN INIT INFO
# Provides: sshd
# Required-Start: $local_fs $network $syslog
# Required-Stop: $local_fs $syslog
# Should-Start: $syslog
# Should-Stop: $network $syslog
# Default-Start:  2 3 4 5
# Default-Stop:  0 1 6
# Short-Description: Start up the OpenSSH server daemon
# Description:       SSH is a protocol for secure remote shell access.
#                    This service starts up the OpenSSH server daemon.
### END INIT INFO

Lo anterior establece que el servicio estará activo en los niveles de ejecución 2, 3, 4 y 5, el número de prioridad de inicio es 55, lo que significa que el servicio iniciará después de cualquier otro servicio con un número menor y que el número de prioridad de terminación es 25, lo que significa que el servicio será detenido antes que cualquier otro servicio con un número mayor.

Activar, desactivar, iniciar, detener o reiniciar servicios.

En CentOS, Fedora™ y Red Hat™ Enterprise Linux

En estos sistemas operativos la gestión de servicios se hace a través de dos herramientas: chkconfig y service. Ambas utilizan como argumentos los nombres de los archivos de inicio de los servicios, los cuales se localizan dentro del directorio /etc/init.d. Ambos también están presentes en openSUSE™ y SUSE™ Linux Enterprise.

Excepto por los servicios básicos para el funcionamiento del sistema, la mayoría de los servicios están desactivados y detenidos en todos los niveles de ejecución.

Uso de chkconfig.

Ejecute chkconfig con la opción --del para eliminar un servicio del sistema, es decir eliminar los enlaces simbólicos dentro de los sub-directorios del directorio /etc/rc.d, de acuerdo a la información definida en el archivo correspondiente dentro del directorio /etc/init.d/. En el siguiente ejemplo se elimina el servicio sshd:

chkconfig --del sshd

Ejecute chkconfig con la opción --add para añadir un nuevo servicio al sistema, es decir crear los enlaces simbólicos de acuerdo a la información definida en el archivo correspondiente dentro del directorio /etc/init.d/. En el siguiente ejemplo se añade el servicio sshd:

chkconfig --add sshd

Lo anterior por lo general se ejecuta automáticamente junto con la instalación de los paquetes RPM correspondientes para cada servicio. Sólo es necesario ejecutarlo cuando se instalan servicios que fueron compilados a partir de paquetes de código fuente o bien casos donde las instrucciones de instalación explícitamente solicitan hacerlo.

Ejecute chkconfig con el nombre del servicio y on como argumentos para activar un servicio que ha sido previamente añadido al sistema. En el siguiente ejemplo se activa el servicio atd:

chkconfig atd on

Para desactivar un servicio ejecute chkconfig con el nombre del servicio y off como argumentos. En el siguiente ejemplo se desactiva el servicio atd:

chkconfig atd off

Para verificar en qué niveles de ejecución están activos o inactivos todos los servicios del sistema, ejecute chkconfig con la opción --list:

chkconfig --list

Ejecute chkconfig con la opción --list y el nombre de algún servicio para verificar en qué niveles de ejecución está activo éste. En el siguiente ejemplo se consulta en qué niveles de ejecución está activo el servicio cups:

chkconfig --list cups

Ejecute chkconfig con la opción --level, el nivel o los niveles de ejecución donde estará activo el servicio, el nombre del servicio y la cadena on para activar un servicio en uno o más niveles de ejecución en particular. En el siguiente ejemplo se activa el servicio vsftpd sólo en los niveles de ejecución 3 y 5:

chkconfig --level 35 vsftpd on

Ejecute chkconfig con la opción --level, el o los niveles de ejecución donde estará inactivo el servicio, el nombre del servicio y la cadena off para desactivar un servicio en uno o más niveles de ejecución en particular. En el siguiente ejemplo se desactiva el servicio cups sólo en los niveles de ejecución 2 y 4:

chkconfig --level 24 cups off

Ejecute chkconfig con el nombre del servicio y reset como argumentos para regresar los servicios a sus valores predeterminados. En el siguiente ejemplo, se regresa a sus valores originales correspondientes al servicio cups:

chkconfig cups reset

Ejecute chkconfig con el nombre del servicio y resetpriorities como argumentos si las prioridades de inicio o terminación de servicios fueron modificados —es decir, se cambio el número de los nombres de los enlaces simbólicos de /etc/rc.d/rc*.d— y se desea dejar todo como estaba. En el siguiente ejemplo, se regresa a los valores originales de sus prioridades al servicio cups:

chkconfig cups resetpriorities

Si se quiere utilizar una herramienta muy sencilla y que es específica de CentOS, Fedora™ y Red Hat™ Enterprise Linux, puede utilizar ntsysv, programa que permite añadir o eliminar servicios del nivel de ejecución actual con una interfaz para modo terminal.

Herramienta ntsysv
Herramienta ntsysv.

Ejecute ntsysv con la opción --level y especificando el nivel o niveles de ejecución deseados si necesita cambiar los servicios de un nivel de ejecución en particular o varios niveles simultáneos. En el siguiente ejemplo se ejecuta ntsysv con la opción --level y 3 como argumento para poder cambiar específicamente los servicios del nivel de ejecución 3:

ntsysv --level 3

En el siguiente ejemplo se ejecuta ntsysv con la opción --level y 235 como argumento para poder cambiar específicamente los servicios de los niveles de ejecución 2, 3 y 5:

ntsysv --level 235

Uso de service.

Ejecute service con el nombre del servicio y start como argumentos para iniciar cualquier servicio. En el siguiente ejemplo se inicia el servicio atd:

service atd start

Lo anterior equivale a ejecutar:

/etc/init.d/atd start

Ejecute service con el nombre del servicio y stop como argumentos para detener cualquier servicio. En el siguiente ejemplo se detiene el servicio atd:

service atd stop

Lo anterior equivale a ejecutar:

/etc/init.d/atd stop

Ejecute service con el nombre del servicio y restart como argumentos para reiniciar cualquier servicio. En el siguiente ejemplo se reinicia el servicio atd:

service atd restart

Lo anterior equivale a ejecutar:

/etc/init.d/atd restart

Ejecute service con el nombre del servicio y status como argumentos para verificar el estado de cualquier servicio. En el siguiente ejemplo verifica el estado del servicio atd:

service atd status

Lo anterior equivale a ejecutar:

/etc/init.d/atd status

La herramienta system-config-services funciona como frente gráfico para chkconfig y service.

Herramienta system-config-services
Herramienta system-config-services.

En openSUSE™ y SUSE™ Linux Enterprise

La gestión de servicios en openSUSE™ y SUSE™ Linux Enterprise se puede realizar también a través de chkconfig y service, pero se prefiere utilizar las herramientas nativas insserv y los guiones rc[X] que se instalan con cada servicio.

Uso de insserv.

Para activar un servicio se ejecuta insserv con el nombre del servicio como argumento. En el siguiente ejemplo se activa el servicio sshd:

insserv sshd

Lo anterior equivale a ejecutar:

chkconfig sshd on

Para desactivar un servicio se ejecuta insserv con la opción -r y el nombre del servicio como argumento. En el siguiente ejemplo se desactiva el servicio sshd:

insserv -r sshd

Lo anterior equivale a ejecutar:

chkconfig sshd off

Todos los procedimientos realizados por insserv pueden ser gestionados también a través del módulo runlevel de YaST en modo simple, ejecutando lo siguiente:

yast runlevel

Módulo runlevel de YaST en modo simple.
Módulo runlevel de YaST, en modo simple.

Iniciar, detener o reiniciar servicios.

Para iniciar un servicio en particular, los paquetes en openSUSE™ y SUSE™ Linux Enterprise instalan archivos con el nombre del servicio, antecedidos por la cadena rc. Por ejemplo, el paquete responsable del servicio cups instala un enlace simbólico denominado /usr/sbin/rccups que apunta hacia el archivo /etc/init.d/cups; el paquete responsable del servicio sshd instala un enlace simbólico denominado /usr/sbin/rcsshd que apunta hacia el archivo /etc/init.d/sshd, etc. Todos éstos son siempre enlaces simbólicos que apuntan hacia los archivos de inicio de los servicios que están en el directorio /etc/init.d, por lo que funcionan de modo similar a como se hace con service y son el método preferido en openSUSE™ y SUSE™ Linux Enterprise para iniciar, detener o reiniciar los servicios.

Ejecute el guión rc[X] correspondiente con start como argumento para iniciar un servicio . En el siguiente ejemplo se inicia el servicio sshd:

rcsshd start

Lo anterior equivale a ejecutar:

/etc/init.d/sshd start

O bien a ejecutar:

service sshd start

Ejecute el guión rc[X] correspondiente con stop como argumento para detener un servicio. En el siguiente ejemplo se detiene el servicio sshd:

rcsshd stop

Lo anterior equivale a ejecutar:

/etc/init.d/sshd stop

O bien a ejecutar:

service sshd stop

Ejecute el guión rc[X] correspondiente con restart como argumento para reiniciar un servicio. En el siguiente ejemplo se reinicia el servicio sshd:

rcsshd restart

Lo anterior equivale a ejecutar:

/etc/init.d/sshd restart

O bien a ejecutar:

service sshd restart

Ejecute el guión rc[X] correspondiente con status como argumento ara verificar el estado de un servicio. En el siguiente ejemplo se verifica el estado del servicio sshd:

rcsshd status

Lo anterior equivale a ejecutar:

/etc/init.d/sshd status

O bien a ejecutar:

service sshd status

Ejecute yast con runlevel como argumento para gestionar —en modo experto— todo lo que se pueda gestionar con insserv y los guiones rc[X]:

yast runlevel

Y luego cambiando del modo simple al modo experto, seleccionado la casilla correspondiente.

Módulo runlevel de YaST en modo experto.
Módulo runlevel de YaST en modo experto.

Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Última Edición: 20/05/2014, 21:02|Hits: 17,692 Ver la versión para imprimir