Registrarse
Home
Foros
Miembros
Calendario
Normas
Ayuda

Foros de usuarios de openSUSE
Retroceder   ForoSUSE > Zona Técnica > FAQs, Manuales y Tutoriales


Síguenos en Twitter Suscríbete a nuestras noticias Acompáñanos en Facebook

Respuesta
 
Herramientas Desplegado

Parar e iniciar servicios en linux
  #1  
Antiguo 26-mar-2006, 21:49
ubaloie
Invitado
 
Mensajes: n/a
Post Parar e iniciar servicios en linux

Cómo parar e iniciar servicios durante y después del arranque de linux

Para ello primero nos tenemos que hacer una idea de cómo es el proceso de arranque:

/sbin/init es el primer proceso y padre del resto.

El archivo de configuración del inicio /etc/inittab contiene: El runlevel por defecto, lanzar las terminales y otras opciones. Dependiendo del runlevel se entrará con una u otra configuración.

Vamos a ver un ejemplo en kubuntu del archivo de configuración del inicio /etc/inittab:

#Por defecto en kubuntu se entra con el runlevel 2
id:2:initdefault:
# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS
# /etc/init.d executes the S and K scripts upon change of runlevel.
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6

Importante: Los runlevel 0 y 6 tienen una función determinada en linux: Cerrar y reiniciar el sistema, respectivamente. En cambio, el resto de los runlevel, pueden configurarse para arrancar y parar determinados servicios. Ejemplo: El runlevel 0, que cierra el sistema, envía la señal terminar a todos los procesos, desactiva las particiones de intercambio, desmonta los sistemas de ficheros local y remoto, si lo hay, etc.

Con independencia del runlevel seleccionado se ejecutarán todos los script/servicios de
/etc/rcS.d/

El script /etc/init.d/rc recibe un argumento con el runlevel a arrancar. Va al directorio /etc/rcX.d/, donde X es el runlevel, y en dicho directorio hay enlaces simbólicos que apuntan a scripts en /etc/init.d que son los que realmente arrancan los servicios e inicializan el teclado, sincronizan el reloj hardware, etc

Los enlaces simbólicos en /etc/rcX.d empiezan por S o K (start) o (kill), seguidos de dos dígitos y apunta a un script con el mismo nombre pero sin S ni K ni los dos dígitos en /etc/init.d

Para que un servicio NO se cargue en el arranque cambiarle en /etc/rcX.d la S, de start, inicial por la K, de kill.
sudo mv SnombreServicio KNombreServicio

Para que SI se cargue :
sudo mv KNombreServicio SNombreServicio

Lo que hemos hecho es renombrar el enlace: sudo mv nombreantiguo nombrenuevo, o más exactamente en linux, mover el archivo dentro del mismo directorio con un nombre nuevo

En ambos casos incluir los dos dígitos entre S ó K y el nombre del servicio. Éste número indica el orden en que arrancará el servicio. A un número menor se arrancará antes que otro con uno mayor.

Si lo que queremos es parar o arrancar un servicio después del arranque del sistema:
/etc/init.d/nombreServicio start/stop

En ubuntu se puede utilizar el comando update-rc.d para hacer exactamente lo mismo:
sudo update-rc.d -f nombre_servicio remove

Y para ponerlo:
sudo update-rc.d nombre_servicio

En Suse se puede utilizar el comando insserv para hacer también exactamente lo mismo:
sudo insserv -r /etc/init.d/nombre_servicio

Y para ponerlo:
sudo insserv -d /etc/init.d/nombre_servicio

Además en ubuntu, para configurar los servicios, existe la herramienta BUM (Boot Up Manager) que esta en las secciones adicionales de Ubuntu. Él configura servicios o da las razones de porque no puede hacerse. (Gracias Eneried)

En Debian, para configurar los servicios, existe la herramienta rcconf, la cual selecciona/deselecciona los servicios con la barra espaciadora.

Las herramientas anteriores no funcionan en todas las distribuciones pero si se usa una distribución en particular que tiene una herramienta que nos facilita el trabajo sería erroneo no aprovecharlo.

Lo que hacen update-rc.d, insserv y rcconf es crear o borrar los enlaces directos en el directorio del runlevel por defecto para que arranquen o no. (Crear/borrar del directorio /etc/rcX.d el enlace a /etc/init.d)(En Suse de /etc/init.d/rcX.d el enlace a /etc/init.d)

Si por un error se borra el script de arranque de un servicio en /etc/init.d pero sigue su enlace en el runlevel por defecto /etc/rcX.d aparecerá un error en el inicio indicando que no puede leer el script XX no existe el fichero

* * *

Hay una manera más fácil de poner o quitar un servicio y de cambiar el runlevel de arranque desde el propio escritorio kde.

En kubuntu:

Menú “Inicio”, menú “System Settings”, icono “System Services”, botón “Administrator Mode”, aquí introduces tu contraseña y te aparecerán todos los servicios, los arrancados y los parados, y el runlevel que tienes activo. Podrás cambiar ese runlevel eligiendo el que desees de una lista desplegable.

Más abajo verás los servicios en una lista con el nombre del servicio, si el servicio arranca o no con el arranque del sistema y el status actual, esto es, si está o no arrancado.

A la derecha hay una botón para marcar si deseamos que el servicio que tengamos seleccionado a la izquierda arranque o no cuando lo haga el sistema, si lo deseleccionamos no arrancará, “Start during boot”.

Y más arriba una descripción del servicio.

* * *

Vamos a usar lo que hemos aprendido para crear un scrip desde otro scritp y hacer que se ejecute durante el arranque en el runlevel por defecto:

Nombre del script: ubcr.sh

Finalidad del script: Crear un scrip desde otro scritp y hacer que se ejecute durante el arranque en el runlevel por defecto.

Explicación: Crear un script desde otro script es un sencillo ejercicio para aprender a programar nuestros propios script. Pero para ir más allá vamos a crear un script que a su vez cree otro script, lo copie en /etc/inid.d y desde allí se creen los enlaces necesarios para que éste segundo script se ejecute durante el arranque de linux.

Puede parecer muy complicado pero es extramadamente sencillo. Se van a crear dos versiones, una para la distribución ubuntu y otra para la distribución Suse linux. únicamente varían a la hora de añadir nuestros script en el arranque, y para ello en ubuntu se utiliza el comando update-rc.d y en Suse se utiliza el comando insserv, pero el resultado es el mismo. Ah, en Suse es necesario incluir en los script del arranque tres líneas que NO son necesarias en ubuntu, se indican cuáles.

Nota para los usuarios de Suse: En Suse tenemos el script /etc/init.d/skeleton que es el esqueleto y el modelo correcto y adecuado para los script de arranque que hagamos nosotros y luego usaríamos insserv para incluir nuestro script dentro del run level.

En realidad lo que hacen update-rc.d e insserv es crear los enlaces simbólicos en /etc/rcX.d y /etc/init.d/rcX.d en ubuntu y Suse respectivamente.

#Creamos dos variables para guardar un texto y la ruta de destino del script a crear.
micad="#Esto es necesario sólo en Suse linux, en otras distribuciones eliminar"
mvdestino="/etc/init.d"
#Creamos el nuevo script y ponemos primera línea en él
echo \#!/bin/bash > $mvdestino/ubaloiecrear.sh
#Añadimos las siguientes línea
echo "/etc/rc.status $micad" >> $mvdestino/ubaloiecrear.sh #Ésto sólo necesario en Suse
echo "rc_reset $micad" >> $mvdestino/ubaloiecrear.sh #Ésto sólo necesario en Suse
echo "echo \"Ejecución del script:\" \$0 >> /tmp/ubaloieresultados" >> $mvdestino/ubaloiecrear.sh
#Hemos usado la barra para imprimir en el archivo destino caracteres especiales
echo "echo \"Hora:\"\`date +%H:%M:%S\`\" Fecha:\"\`date +%d/%m/%Y\` >> /tmp/ubaloieresultados" >> $mvdestino/ubaloiecrear.sh
echo "echo \"Argumento pasado al script, Start o Kill: \" \$1 >> /tmp/ubaloieresultados" >> $mvdestino/ubaloiecrear.sh
echo "rc_exit $micad" >> $mvdestino/ubaloiecrear.sh #Ésto sólo necesario en Suse

#Ahora hacemos al script ejecutable
chmod +x $mvdestino/ubaloiecrear.sh
#Y ahora lo añadimos al arranque de linux.
#Debemos tener derechos de root ya que vamos a escribir en directorios cuyo propietario es el root, así que la siguiente línea dará error a menos que estemos logueados como tal.
insserv /etc/init.d/ubaloiecrear.sh #ésto en Suse
#sudo update-rc.d -f ubaloiecrear.sh Esto en ubuntu, aquí ponemos sudo para ejecutar como root.

#El script que hemos creado desde éste otro quedaria así, en Suse:
#!/bin/bash
/etc/rc.status #Esto es necesario sólo en Suse linux, en otras distribuciones eliminar
rc_reset #Esto es necesario sólo en Suse linux, en otras distribuciones eliminar
echo "Ejecución del script:" $0 >> /tmp/ubaloieresultados
echo "Hora:"`date +%H:%M:%S`" Fecha:"`date +%d/%m/%Y` >> /tmp/ubaloieresultados
echo "Argumento pasado al script, Start o Kill: " $1 >> /tmp/ubaloieresultados
rc_exit #Esto es necesario sólo en Suse linux, en otras distribuciones eliminar

Lo que haría éste script es crear un archivo en /tmp llamado ubaloieresultados en el cual, durante el arranque de linux, se irían agregando el nombre del script ejecutado, siempre el que hemos creado, ahora parece una información inútil y repetida pero más adelante, en otros script, será muy importante saber qué script se ha ejecutado y dónde, pero bueno, eso es para daros ideas de por donde podéis expandir éste script. Bueno agrega más cosas como la hora y la fecha en que se ejecuta el script durante el arranque y parada y si se pasó Start y Kill.

Desde éste script podemos partir para hacer otros realmente potentes y útiles, sí, se que saber quién entra y cuándo entra a la máquina se puede ver en los archivos logs, pero ¿y si están troyanizados? Una idea: De éste script podéis hacer un gestor de información sobre vuestra máquina potente. Podéis usar comandos de linux como ps cambiados de ruta para que no sean troyanizados y "mirar" con él/ellos la seguridad de vuestro sistema.(Realmente es más arduo que eso pero como principio ilustra las posibilidades que tiene)

exit 0

Podríamos haber obviado el crear un script desde otro y hacerlo directamente pero está bien complicar un poco las cosas para ver más posibilidades.

* * *

Saludos. Ubaloie. Linux es libertad

Para cualquier duda o sugerencia: ubaloieARROBAhotmail.com
Responder Citando
  #2  
Antiguo 26-may-2006, 06:31
evaklo
Invitado
 
Mensajes: n/a
muy claro la explicación. Pero a pesar de eso el sh no me levanta en el runlevel5

Espero poder remediarlo. Una pregunta: es absolutamente necesario seguir el esqueleto en suse para que mi script ande correctamente?

Muchas gracias!!!
Responder Citando
Respuesta

Marcadores


(0 miembros y 1 visitantes)
 
Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado

Ir al Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Configurar modem speed touch 330 silver o plateado spam Hardware 30 29-nov-2010 01:13
Un cuento preocupante con Linux kaleimn La cafetería 19 30-dic-2008 19:20
Problemas Wifi USB de Telefonica blaster Internet, Redes y Wireless 10 18-nov-2006 00:02
Problema con red en SuSE 9.0 Pro arandaedgar Internet, Redes y Wireless 6 16-oct-2006 02:52
Suse 10 se cuelga al arrancar el escritorio goordel Hardware 6 14-mar-2006 18:21



Síguenos en Twitter Suscríbete a nuestras noticias Acompáñanos en Facebook


La franja horaria es GMT +2. Ahora son las 22:17.
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.

Esta página está bajo una licencia de Creative Commons, salvo que no se indique lo contrario.
Creative Commons License

Valid CSS!

Diseño por:Designed by: vbdesigns.devbdesigns.de 
Contáctenos - ForoSUSE - Archivo - Declaración de Privacidad - Arriba