Buscar aquí

domingo, 8 de enero de 2012

CRON en Ubuntu: Tareas autómaticas scripst (PHP, Bash) y lanzar programas con interfaz gráfica

Si necesitas que una tarea se ejecute a intervalos regulares o en determinado momento en el futuro CRON es lo que buscas.
CRON es un demonio, un proceso que se ejecuta permanentemente en segundo plano y que ejecuta una tarea en un determinado momento que ha sido previamente programado.

Para instalarlo puedes ir a Synaptic y para comprobar si esta corriendo escribes en la consola:

     service cron status


(Si tienes instalado service), Si se esta ejecutando retorna algo como:




     cron start/running, process 1581



Si no tambien puedes arrancarlo con:



     sudo service cron start


Ahora, para entrar en materia escribimos en la consola:

    sudo crontab -e

Que te da la opción de editar el archivo donde CRON busca las tareas que va a ejecutar, al final de los comentarios debes poner las tareas así:

15 23 * * *

donde el orden es minutos, horas, día del mes, mes, día de la semana y el comando a ejecutar, antes es bueno agregar:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

Que configura las variables de entorno, como el shell que se va a usar, el home, donde están los ejecutables.

Puedes probar con esto:

15 23 * * * halt

ATENCIÓN!!!!! esto va  a apagar tu compu todos los días a las 11:15 pm, pero es una buena prueba.

Ahora puedes querer ejecutar un programa que tiene interfaz gráfica, esto va a ser un poco mas complicado por que CRON ejecuta como root y no puedes ejecutar un programa gráfico en algunos entornos como root, para esto usamos:

su -c vlc usuario

que permite ejecutar vlc como usuario ahi donde se esta ejecutando CRON como root.

15 23 * * * su -c vlc usuario

Guardamos esto al final del archivo poniendo la hora a la que queremos que se ejecute. Esto igual no va a funcionar :), pero podemos aprender algo útil y es a generar un log de errores para CRON, para esto, primero guardamos la instrucción en un script de bash en un archivo con extensión sh y al que daremos permisos de ejecución, la instruccion es (su -c vlc usuario), y escribimos esto en el archivo de CRON:


46 00 * * * sh /donde esta el script/script.sh 2>~/var/log/crontab.err

Si revisamos  /var/log/crontab.err hay cosas como [0x94dd994] main interface error: no suitable interface module y mas cosas con interface, resulta que tenemos que aclar en que pantalla se va a mostar, para saber que pantallas hay disponibles imprimos esta variable:


echo $DISPLAY



lo que me imprime :0.0, así que aclaramos que se va a mostar ahi:



46 00 * * * DISPLAY=:0.0 sh /donde esta el script/script.sh 2>~/var/log/crontab.err

Entonces en resumen, para ejecutar programas que tienen interfaz gráfica es importante no hacerlo como root y decir en que pantalla se va a mostar.

Ahora para ejecutar scripts de PHP, primero hay que averiguar donde esta el ejecutable de PHP del servicio que usamos.
Esto por que como yo, se puede tener instalado Apache 2 y al mismo tiempo Lampp y pues ambos no se ejecutan al tiempo, entonces, sabiendo cual es el que usamos la cosa es así:

25 18 * * * /opt/lampp/bin/php /opt/lampp/htdocs/htdocs/cron.php  2>~/var/log/crontab.err

donde /opt/lampp/bin/php es donde yo tengo mi ejecutable de PHP y el resto donde tengo mi script de php y pues lo que ya vimos del log.

Gracias, y me cuentan como les resulta

Luisa

No hay comentarios: