Cómo crear un script que vigile el funcionamiento de un proceso

mula

El nacimiento de esta entrada tiene que ver conla configuración de un servidor autónomo de aMule en un Raspberry Pi.

Resulta que me he encontrado con el problema de que aMule se cierra cada vez que termina la descarga de un archivo grande (de 6 GB o más) o cuando está completando una descarga terminada si la lista de descargas pendientes es muy larga. Aún no sé cuál es la razón ni proponer una solución elegante al problema, pero hay una manera rápida y sencilla de arreglar las cosas: crear un programa que vigile si aMule está corriendo y, si no lo hace, que lo ejecute. Como se puede intuir, este tutorial es para el aMule pero sirve exactamente igual para cualquier proceso que se pare y necesitemos reiniciar de manera autónoma, solo hay que cambiar los comandos.

Para ello me he basado en un script escrito por Pedro Ventura que he modificado ligeramente yo mismo. Lo que hay que hacer es lo siguiente:

Accede a tu RaspberryPi del modo habitual (sesión gráfica, SSH…). Voy a suponer, en lo sucesivo, que el acceso es por consola. Una vez en la sesión de usuario pi, crearemos un archivo nuevo al que llamaremos controlAmule:

nano controlAmule.sh

y, dentro de este archivo, que lógicamente aparecerá vacío, hay que escribir lo siguiente

#!/bin/bash
RESTART=”/etc/init.d/amule-daemon start”
PGREP=”/usr/bin/pgrep”
AMULED=”amuled”
# busca el proceso
$PGREP ${AMULED}
# si no existe y el comando anterior devuelve 0
if [ $? -ne 0 ]
then
# restablece amule-daemon
$RESTART
fi

Recuerda que si copias y pegas desde este blog debes repasar las comillas para que sean las correctas. WordPress intenta introducir comillas de apertura y cierre diferentes, pero en el programa deben ser comillas rectas normales.

Guarda con Ctrl+O y sal con Ctrl+X. El programa necesario ya está hecho. Hazlo ejecutable escribiendo:

chmod +x controlAmule.sh

Ahora solo hay que conseguir que esta verificación del proceso emuled se ejecute de forma periódica. Ejecuta

crontab -e

y se abrirá un editor (nano) con un archivo nuevo en el que hay unas instrucciones escritas en inglés. Ni caso. Desplázate hasta el final del archivo e incluye:

*/15 * * * * bash /home/pi/controlAmule.sh

Guarda con Ctrl+O y sal con Ctrl+X (el nombre de archivo que el programa propone es muy raro, pero no importa. De nuevo, ni caso). Lo que has hecho es programar, para el usuario pi, una tarea que se ejecute cada 15 minutos. Y esa tarea es la que realiza el programa que acabas de escribir. Por supuesto, si deseas guardar el script en otra ubicación o darle otro nombre no pasa nada, pero tienes que respetar la ruta y el nombre en el comando del crontab. También puedes cambiar la frecuencia de ejecución a 5 minutos (*/5…), a 45 minutos (*/45…) o a cualquier intervalo de tiempo que se te ocurra y te parezca correcto. Cron permite una gran versatilidad en la configuración del tiempo, puedes lanzar un proceso los martes a las 3 de la mañana, cada hora de lunes a viernes, el día de tu cumpleaños a la hora de tu nacimiento, lo que quieras. En internet hay multitud de tutoriales para aprender a programar cron. Otra opción, si eres de los que prefieren tener todo centralizado, es editar como root el archivo /etc/crontab e incluir una línea bajo las que ya existen con el mismo contenido de antes. En este caso debes incluir el nombre del usuario entre los asteriscos y el comando a ejecutar, así: */15 * * * * pi bash /home/pi/controlAmule.sh. Los comandos que tengas programados para tu usuario puedes verlos con crontab -l, editarlos con crontab -e y eliminarlos con crontab -r.

Ya solo queda un paso: reiniciar. Si no quieres hacerlo, ejecuta

sudo /etc/init.d/cron restart

si tienes configurado sudo. Si no, abre una consola de root y escribe el mismo comando sin sudo.

¡Y listo, familia, fácil y sencillo.!rpi1

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s