Bienvenido(a) a Alcance Libre 06/10/2025, 11:01
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.
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.
GNU/Linux tiene 7 niveles de ejecución:
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 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:
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:
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.
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.
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.
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 |
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.
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.
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.
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.
Última Edición: 20/05/2014, 21:02| Hits: 26,011