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:
Publicar un comentario