2010/05/10
This is a Spanish translation by Charles Edward Bedon Cortazar of Unix and Linux startup scripts, Part 1
Charles Edward Bedon Cortazar is a Colombian electronic and telecommunications engineer, specialist in Process Management and Quality and IT consultancy related to ITIL and COBIT. He's been involved in FOSS communities for about ten years and now, along with his freelancing job, he's almost completely committed with the open source project Kuwaiba, which "aims to provide an enterprise grade telecommunications and IT network inventory systems"
Charles would like to promote the following projects:
Kuwaiba: is an open source project that aims to provide an enterprise grade telecommunications and IT network inventory system (http://kuwaiba.sourceforge.net)
Snort-AI: Open source project that integrates the well-known IDS Snort and adds Artificial Intelligence capabilities to it for detection of attacks (http://snort-ai.sourceforge.net)
Asomarrano: (spanish)Blog generalista orientado a la abundante y nunca bien ponderada comunidad de caucanos en el mundo, pero aplicable a la existencia de cualquier colombiano (http://asomarrano.wordpress.com)
Scripts de inicio en Unix y Linux, Parte 1
2009/12/06Automatizando el inicio temprano de programas hace casi 10 años. Mucho ha cambiado desde entonces y me dí cuenta de que realmente se ha convertido en un tema bastante complicado cuando trataba de responder el post de un foro que simplemente preguntaba acerca de cómo iniciar un servicio cualquiera. Si quien preguntaba usaba "httpd", por ejemplo, y tenía un sistema Fedora, muchas respuestas mencionaban "chkconfig". Esa es la respuesta correcta si estuviésemos preguntando específicamente acerca de httpd en un Fedora, pero no es la respuesta correcta para un servicio cualquiera en cualquier sistema Unix o Linux.
Al principio
Al principio, existía un "init". Si tenías un sistema Unix, tenías un "init" y casi seguramente su id era 1. El proceso 0 era de transición (no visible con "ps"); iniciaba el init con un fork y de una forma u otra, el init era el responsable de iniciar todo lo demás.
Había variantes, pero no muchas. Los sistemas BSD simplemente usaban /etc/rc and /etc/ttys. Configurabas los terminales en /etc/ttys y añadías cualquier otra cosa en /etc/rc. Los Unix System V usaban el archivo más complejo /etc/inittab para direccionar las acciones del init, pero realmente no era mucho más que el /etc/ttys - la vida era muy simple. Eso no tardó mucho en cambiar.
inittab básico
El artículo Automatizando el Inicio Temprano de Programas describe el init y el inittab de la manera en que trabajaban en el Unix de SCO y en Linux en aquella época. El inittab de Linux se convirtió pronto en el más estandarizado, aunque con alguna confusión entre /etc/init.d y /etc/rc.d/init.d y el uso de "chkconfig" por parte de Red Hat (o los GUI "ntsysv" o "serviceconf" ) para controlar el inicio temprano de programas. Con cualquier sistema Unix o Linux que use inittab, simplemente necesitas empezar con /etc/inittab y seguir el camino desde ahí. Por ejemplo, el reciente CentOS tiene estas entradas en el /etc/inittab
l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6
De esto puedes saber (si leiste el último artículo) que cuando el sistema entra en un nivel de ejecución en particular, ejecutará el script /etc/rc pasándole el nivel de ejecución como argumento. El script /etc/rc realizará diferentes acciones dependiendo del estado; puedes examinar el script para ver qué hace y cómo lo hace.
Un reciente sistema SCO usa scripts separados para cada nivel de ejecución:
r0:056:wait:/etc/rc0 1> /dev/console 2>&1 </dev/console r1:1:wait:/etc/rc1 1> /dev/console 2>&1 </dev/console r2:2:wait:/etc/rc2 1> /dev/console 2>&1 </dev/console r3:3:wait:/etc/rc3 1> /dev/console 2>&1 </dev/console sd:0:wait:/etc/uadmin 2 0 >/dev/console 2>&1 </dev/console fw:5:wait:/etc/uadmin 2 2 >/dev/console 2>&1 </dev/console rb:6:wait:/etc/uadmin 2 1 >/dev/console 2>&1 </dev/console
Nuevamente. Examina cada script para ver qué hacen, pero en general, en Linux o cualquier otro sistema, verás que estos scripts buscan otros scripts "S" o "K" en un directorio en particular y llevan a cabo la acción apropiada (ver el antiguo artículo para más detalles acerca de estos y variantes como los scripts "P" de SCO).
Nótese que en CentOS /etc/rc3.d es un vínculo a /etc/rc.d/rc3.d. Otros sistemas pueden no tener esos vínculos pero seguir los mismos conceptos.
Pero ahora empecemos con algo un poco más complicado. Digamos que quieres iniciar un proceso en particular. Usaremos "httpd" como ejemplo proque es algo que se encuentra normalmente en sistemas Unix y puedes querer o no que se ejecute. ¿Qué hace que se ejecute? Miremos algunos ejemplos en CentOS y SCO.
El nivel de ejecución por defecto de SCO es 2. la mayoría de sistemas Linux usa 3 para modo multiusuario normal y 5 para modo X11 si se desea. Puede averiguar en cuál está tu sistema ahora por medio del comando "who -r"; un sistema SCO indicaría "2" normalmente, mientras que un Linux mostraría "3" o "5". Ya que el valor por defecto para SCO es "2" y el inittab le dice al init que ejec /etc/rc2 para ese nivel de ejecución, buscamos ese script y encontraremos que a su vez ejecuta scripts en /etc/rc2.d. Uno de esos scripts es P90apache. Si no está ahí, puedes escribir "apache enable"para crearlo. Si está ahí, pero no quieres que se inicie puedes hacer cualquiera de estas cuatro cosas:
- Quitar el scritp de /etc/rc2.d con "rm"
- Ejecutar "apache disable" para quitar el script
- Renombrar el script de tal manera que no inicie con "S", "K" o "P"
- Editar el script adicionando "exit 0" al inicio
Nótese que podrías hacer cosas más interesantes que sólo "exit 0". Podrías verificar la existencia de un archivo y continuar con la ejecución si existe o salir si no.
En CentOS, si buscamos en /etc/rc5.d probablemente encontraremos un K15httpd o un S85httpd (los números pueden ser diferentes en tu sistema). Ambos tienen un link a /etc/rc.d/init.d/httpd. CentOS usa el mismo "chkconfig" que Red Hat para habilitar o deshabilitar los los scripts de inicio temprano:
# pwd /etc/rc5.d # ls *httpd K15httpd # chkconfig httpd on # ls *httpd S85httpd # chkconfig httpd off # ls *httpd K15httpd #
Sin embargo, de la misma manera que en un sistema SCO, puedes controlar esto manualmente renombrando, editando o eliminando scripts (y en otros sistemas sin chkconfig, podrías hacerlo también).
¿Qué tal si pudieras adicionar tu propio script? En SCO crearías un script "S" apropiado en /etc/rc2.d así como un script "K" correspondiente en /etc/rc0.d. Para un sistemas Linux, podrías hacer lo mismo (aunque en /etc/rc.d/rc5.d o /etc/rc.d/rc3.d) o simplemente dejar que chkconfig administre todo por ti. Todo lo que necesitas es un comentario que luzca así:
# chkconfig: - 91 17
Dale un vistazo a cualquiera de los scripts existentes para ver ejemplos. El "91" es lo que seguirá después de la "S" cuando chkconfig cree el vínculo a él desde un script de inicio temprano; el "17" es usados para los scripts "K. Ahora pones tu script en /etc/rc.d/init.d y lo activas:
# chkconfig --add loquesea # chkconfig --list loquesea loquesea 0:off 1:off 2:off 3:off 4:off 5:off 6:off # chkconfig loquesea on # chkconfig --list loquesea loquesea 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Si observas los directorios rc[3-4] verás que tu comando fue añadido:
# ls /etc/rc.d/rc[3-4].d/*loquesea /etc/rc.d/rc3.d/S91mystuff /etc/rc.d/rc4.d/S91loquesea
Suficiente para la primera parte. En la segunda parte dejaremos que Andrew Smallshaw nos muestre cómo trabajan los scripts de inicio de BSD actualmente.
Comments: Click Here.
Want to showcase your product to our audience? Check our advertising options.
Many of the products and books I review are things I purchased for my own use. Some were given to me specifically for the purpose of reviewing them.
I resell or can earn commissions from the sale of some of these items. Links within these pages may be affiliate links that pay me for referring you to them. That's mostly insignificant amounts of money; whenever it is not I have made my relationship plain. If you have any question, please do feel free to contact me.
- | Skills Tests | - | Psst - wanna work for yourself? | - | Unix/Linux Troubleshooting e-book | - | Kerio Mail Server | - | Consulting | - | Advertise Here |
Source: http://feedproxy.google.com/~r/aplawrence/DOLL/~3/LpD_0o54taA/cortazar_unix-startup-scripts-1.html
maksim chmerkovskiy colt brennan accident cell phone eva longoria ipad
No comments:
Post a Comment