elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Tareas en PHP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tareas en PHP  (Leído 1,459 veces)
тαптяα


Desconectado Desconectado

Mensajes: 1.151


Sic utere tuo ut alienum non laeda


Ver Perfil WWW
Tareas en PHP
« en: 18 Octubre 2014, 10:42 am »

Hola foro PHP, mi primera duda aquí

Algo muy básico ejecutar una función cada segundo en el servidor. Pero con cronjobs la resolución mínima es de 1 minuto, alguien sabe maneras de solucionar esto..

Muchas gracias!  

PD: Mi mensaje 1000, espero que tenga respuesta  ;D


« Última modificación: 18 Octubre 2014, 10:52 am por тαптяαпсє » En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: Tareas en PHP
« Respuesta #1 en: 18 Octubre 2014, 12:22 pm »

Si tienes muchas visitas te puedes hacer un script básico tipo el wp-cron.php de wordpress y usar las visitas como trigger. Si no, puedes hacer la típica gamberrada de hacerte un script que visite X archivo cada 1 seg xD

La verdad, me parece una brutalidad que se ejecute cada 1 segundo..

Edit: Y bueno, si puedes setear el max_execution_time, puedes tener corriendo un .php todo el rato y usar sleep().. pero eso es aun mas brutal xD

Saludos


En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Tareas en PHP
« Respuesta #2 en: 18 Octubre 2014, 16:43 pm »

Esto basicamente requiere un daemon propio. Hay formas de hacer que se ejecute cada segundo con un cronjob:

http://stackoverflow.com/questions/1034243/how-to-get-a-unix-script-to-run-every-15-seconds

Esta es basicamente la idea.
En línea

тαптяα


Desconectado Desconectado

Mensajes: 1.151


Sic utere tuo ut alienum non laeda


Ver Perfil WWW
Re: Tareas en PHP
« Respuesta #3 en: 19 Octubre 2014, 11:04 am »

Muchísimas gracias!

La idea del script está bien, pese a que el servidor puede procesar realizar dicha tarea cada segundo, no parece demasiado eficiente, aunque creo que eso soluciona todo.

@MinusFour, estoy viendo esto que me has pasado se basan en scripts, este en concreto parece que hace lo que quiero

Código
  1. #! /bin/sh
  2.  
  3. # Microsecond Cron
  4. # Usage: cron-ms start
  5. # Copyright 2014 by Marc Perkel
  6. # docs at http://wiki.junkemailfilter.com/index.php/How_to_run_a_Linux_script_every_few_seconds_under_cron"
  7. # Free to use with attribution
  8.  
  9. basedir=/etc/cron-ms
  10.  
  11. if [ $# -eq 0 ]
  12. then
  13.   echo
  14.   echo "cron-ms by Marc Perkel"
  15.   echo
  16.   echo "This program is used to run all programs in a directory in parallel every X times per minute."
  17.   echo "Think of this program as cron with microseconds resolution."
  18.   echo
  19.   echo "Usage: cron-ms start"
  20.   echo
  21.   echo "The scheduling is done by creating directories with the number of"
  22.   echo "executions per minute as part of the directory name."
  23.   echo
  24.   echo "Examples:"
  25.   echo "  /etc/cron-ms/7      # Executes everything in that directory  7 times a minute"
  26.   echo "  /etc/cron-ms/30     # Executes everything in that directory 30 times a minute"
  27.   echo "  /etc/cron-ms/600    # Executes everything in that directory 10 times a second"
  28.   echo "  /etc/cron-ms/2400   # Executes everything in that directory 40 times a second"
  29.   echo
  30.   exit
  31. fi
  32.  
  33. # If "start" is passed as a parameter then run all the loops in parallel
  34. # The number of the directory is the number of executions per minute
  35. # Since cron isn't accurate we need to start at top of next minute
  36.  
  37. if [ $1 = start ]
  38. then
  39.   for dir in $basedir/* ; do
  40.      $0 ${dir##*/} 60000000 &
  41.   done
  42.   exit
  43. fi
  44.  
  45. # Loops per minute and the next interval are passed on the command line with each loop
  46.  
  47. loops=$1
  48. next_interval=$2
  49.  
  50. # Sleeps until a specific part of a minute with microsecond resolution. 60000000 is full minute
  51.  
  52. usleep $(( $next_interval - 10#$(date +%S%N) / 1000 ))
  53.  
  54. # Run all the programs in the directory in parallel
  55.  
  56. for program in $basedir/$loops/* ; do
  57.   if [ -x $program ]
  58.   then
  59.      $program &> /dev/null &
  60.   fi
  61. done
  62.  
  63. # Calculate next_interval
  64.  
  65. next_interval=$(($next_interval % 60000000 + (60000000 / $loops) ))
  66.  
  67. # If minute is not up - call self recursively
  68.  
  69. if [ $next_interval -lt $(( 60000000 / $loops * $loops)) ]
  70. then
  71.   . $0 $loops $next_interval &
  72. fi
  73.  
  74. # Otherwise we're done
« Última modificación: 19 Octubre 2014, 16:00 pm por #!drvy » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Barra de tareas
Programación Visual Basic
Thaorius 4 2,204 Último mensaje 17 Julio 2005, 01:16 am
por {_The_Alwar_}
tareas que ralentizan
Dudas Generales
cholo89 4 2,312 Último mensaje 9 Agosto 2015, 03:50 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines