Fonction d'appel à des intervalles de temps spécifiques dans Linux
Question
Quelle est la meilleure façon d'appeler une fonction à l'intérieur d'un démon Linux à des intervalles de temps spécifiques, et l'heure spécifique (par exemple à 12 heures du matin tous les jours, appelez cette fonction). Je ne fais pas référence à l'appel d'un processus avec Crontab, mais à une fonction dans un démon de longue date.
Merci
La solution
Utilisez Settimer avec Itimer_Real et demandez à votre fonction le gestionnaire de Sigalarm.
Autres conseils
D'après vos étiquettes de questions, je comprends que vous exécutez un démon de coquille. Donc, ma suggestion est d'utiliser Crontab, car elle attend déjà d'être utilisée, pour signaler votre démon.
Dans votre démon de coquille, vous avez besoin d'un gestionnaire de signaux
handler() {
echo "$(date): doing something special" >> $LOG
}
vous devez piéger un signal, sigalrm dans cet exemple
trap handler ALRM
Et dans votre crontab envoyez le signal, en supposant que votre démon est un démon.sh
0 0 * * * killall -s SIGALRM daemon.sh
Comparez l'heure actuelle à l'heure à laquelle vous devriez fonctionner, et si c'est plus tard que d'exécuter, puis réinitialisez l'heure.
Mon astuce préférée est:
- Dormez et réveillez toutes les Nème secondes (je préfère personnellement chaque seconde ou toutes les 10 secondes)
- Quand vous réveillez, vérifiez l'heure et vérifiez si j'ai besoin d'exécuter quelque chose
- rincer, répéter ...
La façon dont vous faites cela dépend de votre langue. Dans TCL, je ferais quelque chose comme:
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!