Está en la página 1de 19

alcancelibre.

org

Gestión de servicios. - Alcance Libre


19-24 minutos

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.

1 de 19
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:

Lo anterior indica que el nivel de ejecución predeterminado del

2 de 19
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:

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.

3 de 19
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:

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:

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:

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


detalle:

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

4 de 19
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:

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

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


cual reinicia el sistema:

En el siguiente ejemplo, se conmuta al nivel de ejecución 0 —el


cual apaga el sistema:

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

5 de 19
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:

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

6 de 19
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.

7 de 19
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:

8 de 19
/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.

9 de 19
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.
#

10 de 19
#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

11 de 19
# 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.

12 de 19
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:

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:

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:

Para desactivar un servicio ejecute chkconfig con el nombre del


servicio y off como argumentos. En el siguiente ejemplo se
desactiva el servicio atd:

Para verificar en qué niveles de ejecución están activos o

13 de 19
inactivos todos los servicios del sistema, ejecute chkconfig con la
opción --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:

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:

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:

14 de 19
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.

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:

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:

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:

15 de 19
Lo anterior equivale a ejecutar:

Ejecute service con el nombre del servicio y stop como


argumentos para detener cualquier servicio. En el siguiente
ejemplo se detiene el servicio atd:

Lo anterior equivale a ejecutar:

Ejecute service con el nombre del servicio y restart como


argumentos para reiniciar cualquier servicio. En el siguiente
ejemplo se reinicia el servicio atd:

Lo anterior equivale a ejecutar:

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:

Lo anterior equivale a ejecutar:

La herramienta system-config-services funciona como frente


gráfico para chkconfig y service.

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

16 de 19
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:

Lo anterior equivale a ejecutar:

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:

Lo anterior equivale a ejecutar:

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:

Módulo runlevel de YaST, en modo simple.

Iniciar, detener o reiniciar servicios.

17 de 19
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:

Lo anterior equivale a ejecutar:

O bien a ejecutar:

Ejecute el guión rc[X] correspondiente con stop como argumento


para detener un servicio. En el siguiente ejemplo se detiene el
servicio sshd:

Lo anterior equivale a ejecutar:

O bien a ejecutar:

Ejecute el guión rc[X] correspondiente con restart como


argumento para reiniciar un servicio. En el siguiente ejemplo se
reinicia el servicio sshd:

Lo anterior equivale a ejecutar:

O bien a ejecutar:

Ejecute el guión rc[X] correspondiente con status como

18 de 19
argumento ara verificar el estado de un servicio. En el siguiente
ejemplo se verifica el estado del servicio sshd:

Lo anterior equivale a ejecutar:

O bien a ejecutar:

Ejecute yast con runlevel como argumento para gestionar —en


modo experto— todo lo que se pueda gestionar con insserv y los
guiones rc[X]:

Y luego cambiando del modo simple al modo experto,


seleccionado la casilla correspondiente.

Módulo runlevel de YaST en modo experto.

19 de 19

También podría gustarte