Pregunta

¿Cuál es la mejor manera de llamar a una función dentro de un demonio de Linux a intervalos de tiempo específicos y un tiempo específico (por ejemplo, a las 12 am todos los días, llame a esta función)? No me refiero a llamar a un proceso con Crontab, sino una función dentro de un demonio de larga duración.

Gracias

¿Fue útil?

Solución

Use Settimer con ITIMER_REAL y haga que su función sea llamado por el controlador para Sigalarm.

Otros consejos

De sus etiquetas de preguntas, entiendo que está ejecutando un Daemon de Shell. Entonces, mi sugerencia es usar crontab, ya que ya está esperando ser usado, para indicarle a su demonio.

En el demonio de su carcasa necesitas un manejador de señal

   handler() {
      echo "$(date): doing something special" >> $LOG
   }

Tienes que atrapar una señal, sigalrm en este ejemplo

    trap handler ALRM

Y en su crontab envíe la señal, suponiendo que su demonio sea demonio.

   0 0 * * * killall -s SIGALRM daemon.sh

Compare la hora actual con el tiempo que debe estar ejecutando, y si es más tarde que se ejecuta y luego restablezca la hora.

Mi truco favorito es:

  • Duerme y desperté cada en segundo lugar (personalmente prefiero cada segundo o cada 10 segundos)
  • Cuando se despierte, verifique la hora y verifique si necesito ejecutar algo
  • Enjuague, repita ...

Cómo haces esto depende de tu idioma. En TCL haría algo como:

proc scheduler {} {
    global task_list
    set now [clock format [clock seconds] -format "%H:%M"]

    foreach task $task_list {
       lassign $task_list time task
       if {$time == $now} {
           apply $task
       }
    }
    after 1000 scheduler ;# repeat after 1 second
}

scheduler ;# GO!
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top