javoaxian cambió a: javoaxian.me
Este blog se mantendrá como histórico del nuevo javoaxian.me. Por tal motivo, sólo serán creados post que harán referencia a los del nuevo blog. Si hay dudas y comentarios, favor de hacerlos en javoaxian.me.

martes, 4 de marzo de 2008

Ejecutar procesos al arrancar Debian o en distribuciones basadas en élla

En muchas ocasiones requerimos que algunos procesos o programa se ejecuten en cuanto se encienda la máquina, como por ejemplo cuando queremos hacer que algún manejador de base de datos inicie o que el servidor web arranque o quisas nuestras reglas de firewall, en fin, son muchas las opciones.

Una forma sencilla de hacer ésto, es crear un script que se encargue de arrancar y dar de baja la aplicación que deseemos y posteriormente colocarla en los directorios de arranque del sistema operativo. Para realizar esto pongo aquí un ejemplo de un script para arrancar a Postgresql.

#!/bin/sh
#
# description: startup and shutdown the PostgreSQL
#
echo "PostgreSQL start/stop"

POSTGRESQL_OWNER=postgres
POSTGRESQL_HOME=/opt/pgsql

case "$1" in
'start')
# Start the PostgreSQL
echo -n "Starting the PostgreSQL Server... "
POSTMASTER="$POSTGRESQL_HOME/bin/postmaster \-i \-D $POSTGRESQL_HOME/data >> $POSTGRESQL_HOME/data/bitacora.btc 2>&1&"
su - $POSTGRESQL_OWNER -c "$POSTMASTER"
echo
;;
'stop')

# Stop the PostgreSQL
echo -n "Shutting down PostgreSQL Server... "
KILLPOSTMASTER="kill \-INT `head -1 $POSTGRESQL_HOME/data/postmaster.pid`"
su - $POSTGRESQL_OWNER -c "$KILLPOSTMASTER"
echo
;;

'restart')
# Restart the PostgreSQL
echo -n "Restarting PostgreSQL Server... "
$0 stop
$0 start
echo
;;

*)
echo "Usage: postgresqld [ start | stop | restart ]"
exit 1
esac
exit 0
En este archivo existen 3 secciones muy importantes, la que se refiere al comando que se ejecutará para arrancar el proceso, en éste caso postgresql, el comando para detener el proceso y una opción para reiniciar el proceso.

Vamos a suponer que este archivo lo creamos en nuestro HOME y le pusimos el nombre de archivo postgresqld. Procederemos entonces a copiarlo en el directorio "/etc/init.d" (el cuál sólo root tiene acceso).

$ sudo cp ~/postgresqld /etc/init.d/

Hecho ésto, nos moveremos al directorio "/etc/init.d" y le daremos permisos de ejecución al archivo.

$ cd /etc/init.d
sudo chmod 700 postgresqld

Puede probarse el script para ver si está funcionando correctamente, la forma de hacerlo es ejecutarlo de la siguiente manera para arrancar postgresql.

$ sudo ./postgresqld start

Con ésto deberá arrancar el proceso de postgresql.

Para detenerlo podemos ejecutar lo siguiente.

sudo ./postgresqld stop

Ahora sólo basta con ejecutar un comando para hacer que el script permita arrancar Postgresql al iniciar el equipo, para lo cual haremos lo siguiente.

$ sudo update-rc.d postgresqld defaults

Donde nos aparecerá algo semejante a ésto.

Adding system startup for /etc/init.d/postgresqld ...
/etc/rc0.d/K20postgresqld -> ../init.d/postgresqld
/etc/rc1.d/K20postgresqld -> ../init.d/postgresqld
/etc/rc6.d/K20postgresqld -> ../init.d/postgresqld
/etc/rc2.d/S20postgresqld -> ../init.d/postgresqld
/etc/rc3.d/S20postgresqld -> ../init.d/postgresqld
/etc/rc4.d/S20postgresqld -> ../init.d/postgresqld
/etc/rc5.d/S20postgresqld -> ../init.d/postgresqld

Listo, ahora que se reinicie el equipo se arrancará Postgresql.

Si se deseara quitar el script del arranque del sistema, realizaremos ésto (recuerda estar en el directorio "/etc/init.d").

$ sudo update-rc.d -f postgresqld remove

Otra manera de agregar el script para arrancar desde el inicio una aplicación, es personalizando sus parámetros, como por ejemplo.

sudo update-rc.d postgresqld start 10 2 3 4 5 . stop 10 0 1 6 .

En la línea anterior indicamos que el script postgresqld deberá iniciar en los niveles de arranque de Debian 2 3 4 y 5 y le asignará el número 10 para arrancar. También se indica que deberá de detener en los niveles de arranque 0 1 y 6 con el mismo indentificador del de inicio.

Para más información de como usar este comando, puede consultar el comando "man".

$ man update-rc.d

6 comentarios:

guidosepulveda dijo...

Excelente tutorial, solo encontre un detalle en el script de inicio y detencion
del postgres en la linea que dice:

KILLPOSTMASTER="kill \-INT `head -1 POSTGRESQL_HOME/data/postmaster.pid`"

a la variable POSTGRESQL_HOME se le debe anteponer el signo $ para que funcione la detencion de postgres

javoaxian dijo...

Gracias por tu observación, yo creo que lo borré cuando pegué el código.

Saludos!!!

kakaroto.deb dijo...

Hola Javo, excelente tu trabajo me ha ayudado mucho, estaré pendiente de lo que publiques, gracias.

http://kakaroto-deb.blogspot.com

EJGM dijo...

Ecelente material:

Hermanos quiero agregar la habilitacion de incrementar el swap en un suse10 pero tengo dudas en cuanto a la estructura del script , de antemano gracias por algun tip que me sirva para colocarlo.

Leonardo dijo...

Bueno amigos, necesito su ayuda este es un error que me da:

Shutting down PostgreSQL Server... ./postgresqld: line 22: =kill \-INT 28591: command not fo und

Me pueden decir como lo puedo solucionar, se los agradeceria de verdad

javoaxian dijo...

Según lo que puedo ver el error es ejecutando el script postgresqld. Verifica que esta línea:

KILLPOSTMASTER="kill \-INT `head -1 $POSTGRESQL_HOME/data/postmaster.pid`"

esté bien copiada.

Saludos!!!