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

Était-ce utile?

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!
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top