Funzione di chiamata a intervalli di tempo specifici in Linux
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
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!