Deprecated: Assigning the return value of new by reference is deprecated in /home/controlz/public_html/blog/wp-settings.php on line 472

Deprecated: Assigning the return value of new by reference is deprecated in /home/controlz/public_html/blog/wp-settings.php on line 487

Deprecated: Assigning the return value of new by reference is deprecated in /home/controlz/public_html/blog/wp-settings.php on line 494

Deprecated: Assigning the return value of new by reference is deprecated in /home/controlz/public_html/blog/wp-settings.php on line 530

Strict Standards: Declaration of Walker_Page::start_lvl() should be compatible with Walker::start_lvl(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 594

Strict Standards: Declaration of Walker_Page::end_lvl() should be compatible with Walker::end_lvl(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 594

Strict Standards: Declaration of Walker_Page::start_el() should be compatible with Walker::start_el(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 594

Strict Standards: Declaration of Walker_Page::end_el() should be compatible with Walker::end_el(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 594

Strict Standards: Declaration of Walker_PageDropdown::start_el() should be compatible with Walker::start_el(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 611

Strict Standards: Declaration of Walker_Category::start_lvl() should be compatible with Walker::start_lvl(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 705

Strict Standards: Declaration of Walker_Category::end_lvl() should be compatible with Walker::end_lvl(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 705

Strict Standards: Declaration of Walker_Category::start_el() should be compatible with Walker::start_el(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 705

Strict Standards: Declaration of Walker_Category::end_el() should be compatible with Walker::end_el(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 705

Strict Standards: Declaration of Walker_CategoryDropdown::start_el() should be compatible with Walker::start_el(&$output) in /home/controlz/public_html/blog/wp-includes/classes.php on line 728

Strict Standards: Redefining already defined constructor for class wpdb in /home/controlz/public_html/blog/wp-includes/wp-db.php on line 306

Deprecated: Assigning the return value of new by reference is deprecated in /home/controlz/public_html/blog/wp-includes/cache.php on line 103

Strict Standards: Redefining already defined constructor for class WP_Object_Cache in /home/controlz/public_html/blog/wp-includes/cache.php on line 425

Deprecated: Assigning the return value of new by reference is deprecated in /home/controlz/public_html/blog/wp-includes/query.php on line 21

Deprecated: Assigning the return value of new by reference is deprecated in /home/controlz/public_html/blog/wp-includes/theme.php on line 623

Strict Standards: Redefining already defined constructor for class WP_Dependencies in /home/controlz/public_html/blog/wp-includes/class.wp-dependencies.php on line 15

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/controlz/public_html/blog/wp-settings.php:472) in /home/controlz/public_html/blog/wp-content/plugins/si-captcha-for-wordpress/si-captcha.php on line 31

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/controlz/public_html/blog/wp-settings.php:472) in /home/controlz/public_html/blog/wp-content/plugins/si-captcha-for-wordpress/si-captcha.php on line 31

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method GoogleSitemapGeneratorLoader::Enable() should not be called statically in /home/controlz/public_html/blog/wp-includes/plugin.php on line 311
Ejecutar diariamente un fichero PHP mediante crontab + wget | formatic.cat

Ejecutar diariamente un fichero PHP mediante crontab + wget

El problema de hoy es ejecutar un script php cada día a una hora determinada. Necesitamos ejecutar una consulta sql que elimine los pedidos no validados  diariamente. Explicaremos como realizar esto desde un hosting externo.

En en el caso concreo en el que estamos, queremos ejecutar cada día un fichero php alojado en nuestro servidor. Concretamente nuestro hosting posee el gestor Cpanel, desde el cual se nos ofrece una herramienta web para programar tareas. Dentro de las herramientas avanzadas disponemos del “Programador de tareas” desde el que tenemos dos modos el avanzado y el estandard.

Lo mas importante es conocer el comando que vamos a untilizar para lanzar la petición al fichero php deseado. Para usaremos wget ‘http://url-del-fichero.php’ > /dev/null ;

De este modo se lanza una peticion a la url que deseemos, es importante poner entre comillas simples la url. La parte final indica que la salida del comando wget no la necesitamos y la redireccionamos unfichero vacio. si nos interesara guardar la salida, se podria redireccionar a un fichero.

Ademas podemos hacer que cpanel envie un mail con la salida del fichero por email poniendo una dirección de email en la caja destianda a ello en la pantalla. De todos modos, en nuesto caso es aconsejable que este tipo de ficheros no tengan ninguna salida. Puesto que solo queremos actualizar la base de datos.

Modo Avanzado:

todo aquel que sea mas experto en unix, se sentirá mas comodo desde esta pantalla donde puede usar una sintaxis mas parecida a la del comando Cron de unix. Los  ‘*’  indican que se repita siempre. En el ejemplo de la figura se repetiria todos los dias, de todos los meses de todos los años a las 00:00 h. Lo que quiere decir que cada día a las 00:00 se ejecutará el comando que deseemos.

crontab avanzado de Cpanel

crontab avanzado de Cpanel

Modo Estandard:

Para los usuarios menos avanzados se puede elegir en modo estandard, donde podremos seleccionar de la lista las opciones de repeticion del intervalo. En el ejemplo se selecciona el minuto 0, la hora 3 y todos los demas se dejan pordefecto. Es curioso pero hay que dejar en día de la semana cada fin de semana, aunque la traducción no es la mas correcta, simplemente indica que tambien se repite los fines de semana, ademas de los dias de entre semana.

crontad estándard en Cpane

crontad estándard en Cpanel

Si tuvieramos acceso al servidor y este tuviera sistema operativo linux, podríamos usar los comandos propios de la consola de linux, para programar tareas como son:

  • comando cron -> sirve para ejecutar comandos de unix en intervalos regulares de tiempo períodicos. Así se podrán ejecutar comandos con la frecuencia que queramos, desde cada minuto, hasta solo unos dias concretos del año, solo los domingos, etc..
  • comando at: sirve para programar la ejecución de comandos unix en una fecha concreta, futura y puntual. Una vez estemos haciendo pruebas es importate conocer como listar las tareas que estan planificadas, mediante el comando atq, donde saldrá una lista numerada con las tareas programadas. Para eliminar cualquiera de ellas solo hay que usar el comando atrm junto el número de tarea que aparecía en el listado del comando atq.

Etiquetas: , , , , ,

20 comentarios para “Ejecutar diariamente un fichero PHP mediante crontab + wget”


  1. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    Manuel dice:

    Gracias por tu información. Ha sido el único sitio donde el comando para ejecutar el Cron con wget era el correcto, después de mirar en bastantes webs.


  2. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    Cristian dice:

    Me alegra que haya servido el post sobre el comando wget y cron.

    podrías decir que sistema operativo usas? y que versión? Posiblemente tengamos una versión similar.


  3. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    Hugo dice:

    A ver si me puedes ayudar con esto.
    Necesito desde un cron job en IIS6.0 panel Plesk, ejecutar un archivo con estos parametros:
    index.php?t_=parser
    y el servidor no permite el parámetro ?t ni ninguno.
    Yo pense en crear un script php que “redireccione” o el a su vez llame a la tarea con el parametro correspondiente.
    ¿Como sería el archivo php para realizar esto?

    Si me puedes ayudar desde ya muchas gracias.

    Hugo


  4. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    cristian dice:

    Si por algun motivo no te deja abrir esa direción, puedes hacer como dices.

    En el php destino donde no le pasas variables para poderlo programar. Le añades:

    < ?
    header('location:http://midominio.com/miCarpeta/miFichero.php?varibles1=loquesa&otraVariable=loquesea');
    ?>

    con esto será suficiente.
    El cron hace la peticion a tu php destino, quien internamente redirecciona la url con un location de php


  5. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    JaSF dice:

    hola, yo tenia una pregunta, yo necesito ejecutar un script php cada minuto, pero a partir de una instruccion, y terminarlo cuando se cumpla cierta condicion. Es decir: cuando yo le doy commit a un form quiero ejecutar un script varias veces hasta que una condicion de la base de datos me diga que pare. Como realizo eso? Gracias


  6. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    joan dice:

    Existe una funcion llamada sleep(tiempo en segundos) en php, dentro del bucle que debes hacer en el php, una condicion podria irse al sleep porque debe esperar 1 minuto mas y hacer otra vuelta de bucle, y otra condicion se va del bucle y ha terminado la ejecucion del sleep y bucle.


  7. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    Chema dice:

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/controlz/public_html/blog/wp-includes/kses.php on line 947

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/controlz/public_html/blog/wp-includes/kses.php on line 948

    Hola Cristian, me surge una duda:
    yo utilizo esta funcion para enviar un mailing mensual a los socios de mi página. Si utilizo por ejemplo la direccion http://mipagina.com/mailing.php corro el riesgo de que cualquiera pueda ejecutar este script simplemente poniendo la url en su navegador no?
    un saludo.


  8. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    cristian dice:

    Hola, es correcto.

    Esa url, cualquiera puede ejecutarla. Por ello siempre se debe de proteger de algun modo según el uso del script. Por ejemplo, podrias usar una verificación por fecha, para que solo los dias 30,31 o 29 o 28 pueda ser enviado. Puesto que en tu caso solo es al final del mes.

    Además para que solo se envie una vez, podrías apuntarte en bd, o en un fichero en el servidor, si se ha enviado ese día ya. Y con estas 2 cosas, ya solo se enviaría una vez el último dia del mes…

    El propio escript con unas faciles comprobaciones, puedes evitar que no se ejecute cuando no toca. La idea es garantizar que solo se ejecuta cuando lo hemos programado y solo una vez.

    tambien decirte que de entrada, esa url nadie la conoce… Es un primer nivel de seguridad, debil… pero algo es algo :P

    Saludos


  9. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    Arka dice:

    Hola, fa la verdad fue excelente tu aporte.
    Tengo una pregunta, mi servidor o mas bien mi proveedor no me deja usar el comando wget en el Cron…

    Necesito ejecutar algo que me respade la base de datos automaticamente y no le encuentro la vuelta Cron

    Desde ya muchas gracias por tu ayuda, ya que en todo el mundo no hay nada tan concreto y bien explicado como tu aporte…

    Salu2


  10. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    cristian dice:

    Muchas gracias Arka,

    nos gusta hacer bien nuestro trabajo y cada vez que no encuentro algo que me hace perder mi tiempo, intento compartirlo.

    Ahora mismo no se me ocurre mas que decirte dos cosas:

    1- Habla con tu hosting o proveedor e comentale, que si no te dejan usar el wget, que otro comando puedes usar.

    2- posiblemente puedes lanzar linx, suele estar instalado en casi siempre en linux por defecto. Así puedes quizar, lanzar desde le cron un comando como linx mipagina.php..

    Espeor que te sirva.

    un saludo.


  11. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    cristian dice:

    Otra manera provisional sería incluir ese script en un include en los ficheros de la web. de tal modo que cada vez que alguien te visite, si necesario (puedes apuntarte en bd la ultima actulizacion) te actualize. Esto no permite controlar el tiempo entre dos copias, pero con una media de 200 visitas dia, casi te garantiza que cada dia se te ejecute ese código. No es muy bonito, pero temporalmente mientras encuentras otra manera de hacerlo, te puede salvar…

    saludos,


  12. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    Fer dice:

    Parece que tu artículo es un nido para los que nos liamos con los cron, muchas gracias.

    A ver si me puedes ayudar a mi también. Tengo unos cuantos feeds en una web, y claro, cada vez que se actualiza tarda mucho en abrir, por lo que quiero crear un cron que ejecute esa url cada hora para que cargue los feeds en cache y tarde menos en cargarse la url cuando entra el primer visitante despues de la actualización.

    He leido mucho sobre los cron, pero no encuentro respuesta. ¿sería posible ejecutar esa url con el comando, por ejemplo: wget ‘http://www.miweb.com/mis-feeds/’ > /dev/null ;? , o tengo que crear un script que la ejecute y meterlo en un fichero .php

    A lo mejor ni uno, ni otro, y estoy mal encaminado ;-).

    Un saludo


  13. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    adolfo dice:

    Perfecto, me ha funcionado a la primera con las explicaciones al principio-
    Muchas Gracias.


  14. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    Cristian dice:

    Hola fer,

    Pues no termino de ver el problema con lso feeds? Pq dices que quieres ponerlos en cache. Pero la cache depende del navegador del cliente, por lo que aunque tu cogieras y llamases al fichero cada hora, el primer visitante volvera a pedir los feeds pues no tiene cache de estos.

    Por lo que entiendo, lo que aría yó es hacer un script encargado de recoger los feeds y meterlos en una bases de datos ordenaditos. y cada hora o cada x minutos actualizas con un cron el fichero que refresca la BD. La parte php que ve el cliente simplemente lee de BD sin que tarde ni un segundo en pedir los feeds, siemplemente muestra los resultados de la bd. Asi ahorras problemas… no se es una solucion tan criticable como cualquier otra…


  15. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    Cesar dice:

    Hola buenos dias, tengo una duda, ejecuto tareas automaticas cada minutos para enviar un codigo a mis clientes, el problema es que uso el comando header (location XXXX) para enviar un servicio a una compania, pero ya no puedo seguri ejecutando mi programa, se sale y nada mas puedo mandarle una sola vez, si tengo dos clientes que les tengo que enviar en ese minuto un mensaje, nada mas se lo peudo enviar al primero porque se sale, sabes como le peudo ahcer para que regrese y siga funcionando mi while (en ese caso lo uso para sacar datos de la base de datos). Gracias


  16. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    cristian dice:

    puedes explicar mejor el problema Cesar?

    no entiendo lo del programa ese que tienes que se cierra…

    Usar un header location dentro del código no es problema.

    Si se te cierra ese programa donde haces una petición, quizas te sirva mas y teniendo en cuenta que solo se trata de 1minuto. y solo 2 clientes… Se podría usar la función SLEEP(60), que duerme la ejecución de un script php durante x segundos… así en tu while se ejecutaría una vez y al final de la vuelta lo duermes 1minuto y luego haces el siguiente cliente…

    Explicate mejor y quizas pueda ayudarte!


  17. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    minipunk dice:

    Yo utilizo strato como hosting, el CPanel es muy diferente, pero los conceptos son los mismos, he encontrado y configurado con Cron (trabajos cron le denominan en el panel de strato).
    Desde ese panel no he metido más código que la url del script, lo demás se configura desde el panel que tienen ellos.
    Mil gracias por orientarnos ;)


  18. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    Walter dice:

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/controlz/public_html/blog/wp-includes/kses.php on line 947

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/controlz/public_html/blog/wp-includes/kses.php on line 948

    Una Solusión para ejecutar php con wget enviando parametros es:
    wget -q –delete-after http://localhost/file.php?var1\&var2\&var3….
    a mi me funciona excelente


  19. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    José Carlos dice:

    El parámetro –delete-after es importantísimo si no queremos que se nos llene el servidor con archivos resultado de las pasadas del cron. Llamando wget simplemente con get ‘http://url-del-fichero.php’ > /dev/null creará un archivo nuevo a cada llamada, la redirección de la salida a /dev/null es lo mismo que si pusiésemos el parámetro -q para no mostrar la salida, pero el archivo descargado se seguirá grabando.

    La forma más limpia de usar wget en cron es la que ha indicado Walter, con -q y con –delete-after


  20. Deprecated: Function ereg() is deprecated in /home/controlz/public_html/blog/wp-content/plugins/google-analyticator/google-analyticator.php on line 399
    Fran dice:

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/controlz/public_html/blog/wp-includes/kses.php on line 947

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/controlz/public_html/blog/wp-includes/kses.php on line 948

    Al final de este enlace, teneis un ejemplo para quien se atreva a ejecutar un fichero php cada cierto tiempo pero haciendolo todo desde la shell del sistema,

    http://blog.frangalian.com/?p=114

Deja un comentario

CAPTCHA Image Audio Version
Reload Image