Ver Mensaje Individual
  #10 (permalink)  
Antiguo 20/03/2012, 14:48
Avatar de emprear
emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: cronjob shell php en windows 7

Bueno, como me quedé con la duda, además de comprobar que los comandos AT funcionan cuando quieren y que el programador de tareas es un fiasco, llegué hasta esto

Descargar el nncronlt117.exe desde http://www.nncron.ru/download.shtml , hay otra versión que no es lite, que creo incluye una interfaz gráfica, pruebenla si quieren

En windows 7 y como administrador instalan el programa, este instala e inicia el servicio "cron"
Ahora solo resta editar el archivo cron.tab que esta en la carpeta de instalación por defecto --> C:\Program Files (x86) con el editor de texto. Ese Archivo usa la misma sintáxis que en unix (en el archivo de ayuda hay una muy buena referencia y ejemplos)

Hasta acá funciona perfecto, con ejecutables ú aplicaciones (notepad.exe, etc)
Pero el php tiene un par de vueltas (que no están relacionadas con el cron en si, sino más bien son propias de php)
A continuación dejo el ejemplo con el que trabaje

Tengo instalado php en i:\xampp\php, ahi mismo está mi php.ini, y esa carpeta está en el path de windows.

La linea de comandos para la ejecución me quedó
php -f i:\hora-cron.php
y como quiero que se ejecute cada minuto, mi cron.tab queda asi

#CRONTAB FILE
# Classic crontab format:
*/1 * * * * php -f i:\hora-cron.php


el contenido de hora-cron.php es

Código PHP:
Ver original
  1. <?php
  2. echo "guardando archivo\n";
  3. $hora = date('H:i:s');
  4. $escribir = file_put_contents('i:\hora-cron.txt',"$hora\n",FILE_APPEND);
  5. if($escribir !== false){
  6. echo "ok";
  7. }
  8. echo "\n\rfin\n";
  9. sleep(5);
  10. ?>
hay una condición y un sleep, simplemente para verificar el funcionamiento...
El resultado es un archivo hora-cron.txt con este contenido

Código txt:
Ver original
  1. 16:56:02
  2. 16:57:02
  3. 16:58:02
  4. 16:59:02
  5. 17:00:02
  6. 17:01:02
  7. 17:02:02
  8. 17:03:02
  9. 17:04:02
  10. 17:05:02
  11. 17:06:02
  12. 17:07:02
  13. 17:08:02
  14. 17:09:02
  15. 17:10:02
  16. 17:11:02
  17. 17:12:02
  18. 17:13:02
  19. 17:14:02
  20. 17:15:02
  21. 17:16:02
  22. 17:17:02

Pero porque dije que con php tiene sus vueltas? Explico:
Cuando inicié las pruebas habia creado un archivo hora-cron.cmd(bat) con
@echo off
php -f i:\hora-cron.php
pause
´
como se observa es el mismo comando que le paso en el cron.tab más arriba
y mi hora-cron.php tenía esto
<?php
echo "guardando archivo\n";
$hora = date('H:i:s');
$escribir = file_put_contents('hora-cron.txt',"$hora\n",FILE_APPEND);
if($escribir !== false){
echo "ok";
}
echo "\n\rfin\n";
?>
Si le hacia doble click en el explorador, me escribia el hora-cron.txt y funcionaba perfecto, entonces en mi cron.tab puse

#CRONTAB FILE
# Classic crontab format:
*/1 * * * * i:\hora-cron.cmd


El cron lo ejecutaba, el php se ejecutaba, se observava el "guardando archivo", no había advertencias ni errores... pero el hora-cron.txt NO SE ESCRIBIA.
La solución, si comparan con lo que funcionaba al principio, fue dar la ruta completa, al archivo hora-cron.txt dentro de file_put_contents();. El porque de esto, no estoy muy seguro. Por lo tanto aconsejo usar rutas completas para todo tipo de archivo.
Demás está decir que lo que se pueda o no se pueda hacer desde la linea de comandos con php, es otra historia.

Conclusión, el nnCron Lite, es una buena alternativa, y consume muy pocos recursos.

Si alguno experimenta con la versión completa, sería bueno que deje sus evaluaciones.
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.