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.
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.#!/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
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
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
/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:
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
Gracias por tu observación, yo creo que lo borré cuando pegué el código.
Saludos!!!
Hola Javo, excelente tu trabajo me ha ayudado mucho, estaré pendiente de lo que publiques, gracias.
http://kakaroto-deb.blogspot.com
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.
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
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!!!
Publicar un comentario