Domanda

Qual è il modo migliore per chiamare una funzione all'interno di un demone Linux a intervalli di tempo specifici e tempo specifico (ad esempio alle 12:00 ogni giorno, chiamare questa funzione). Non mi riferisco a chiamare un processo con Crontab, ma una funzione all'interno di un demone a lungo termine.

Grazie

È stato utile?

Soluzione

Usa setTimer con itimer_real e fai chiamare la funzione dal gestore per Sigalarm.

Altri suggerimenti

Dai tuoi tag domande ho capito che stai eseguendo un demone con shell. Quindi il mio suggerimento è di usare Crontab, in quanto sta già aspettando di essere usato, per segnalare il tuo demone.

Nel demone della shell hai bisogno di un gestore di segnale

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

Devi intrappolare un segnale, sigalrm in questo esempio

    trap handler ALRM

E nel tuo crontab invia il segnale, supponendo che il tuo demone sia demone.sh

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

Confronta l'ora corrente al momento in cui dovresti essere in esecuzione e se è più tardi che eseguire e quindi ripristinare il tempo.

Il mio trucco preferito è:

  • Dormi e sveglia ogni ent. (Personalmente preferisco ogni secondo o ogni 10 secondi)
  • Quando ti sveglia, controlla l'ora e controlla se ho bisogno di eseguire qualcosa
  • Risciacquare, ripetere ...

Come lo fai dipende dalla tua lingua. In TCL farei qualcosa come:

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!
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top