domingo, 29 de mayo de 2011

Los scripts init y Upstart Jobs en Ubuntu

Como muchos ya saben desde la versión 9.10 de Ubuntu se comenzó a implementar Upstart como un reemplazo al daemon init el cual se encarga de iniciar los servicios durante el arranque, detenerlos al apagar y supervisar su funcionamiento durante la ejecución del sistema. Upstart controla los servicios basándose en eventos, lo que le da cierta ventaja sobre init ya que puede interactuar automáticamente con el sistema, los servicios y el daemon init.

Dado que Upstart no ha sido implementado totalmente todavía podemos administrar servicios mediante init, pero algunos servicios ya han sido convertidos a Upstart y esto crea un conflicto entre ambos por el control de dichos servicios. De esto podemos darnos cuenta al apagar el sistema y reiniciar y ver el log que ha quedado desde el encendido, mientras se apaga, cuando los servicios se iniciaban. Dicho comportamiento también se repite cuando lo iniciamos, reiniciamos o vemos su status manualmente desde un terminal con el comando service o directamente en /etc/init.d/.


$ sudo service portmap start
Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the start(8) utility, e.g. start portmap
start: Job is already running: portmap

Lo que este mensaje nos está diciendo es que el script de portmap ha sido convertido, o más bien agregado, como un Upstart job. Además de que es posible iniciar el servicio con el comando start y, evidentemente, deternerlo con el comando stop. Los scripts de Upstart se encuentran /etc/init

Podemos ver el estado de los servicios de con el comando initctl list.

$ initctl list | grep portmap
portmap start/running, process 1338
portmap-boot stop/waiting
portmap-wait stop/waiting

Podemos ver que efectivamente el servicio portmap ya está ejecutándose porque Upstart lo inició antes que init

En este punto, si queremos subsanar esta situación, aunque no es una cosa del otro mundo, lo que podemos hacer es remover el servicio portmap de borrando los scripts de cada runlevel ubicados en /etc/init.d/ para que solo Upstart lo controle.

$ sudo update-rc.d -f portmap remove

Si al contrario queremos dejar que sea init quien maneje el servicio moveremos el fichero de configuración para dicho servicio ubicado en /etc/init y podremos los scripts por defecto correspondientes a cada runlevel en /etc/init.d/.

$ sudo mv /etc/init/portmap.conf /etc/init/portmap.conf.copy
$ sudo update-rc.d -f portmap defaults


Estos mismos pasos son aplicables para cualquier otro servicio (nfs-kernel-server, ssh, smbd). Espero que esta guía les sea de gran utilidad. Hasta la próxima!!


Artículos relacionados



Widget by Hoctro | Jack Book

0 comments:

Publicar un comentario