Frage

Was ist der beste Weg, um eine Funktion in einem Linux -Daemon in bestimmten Zeitintervallen und zu einer bestimmten Zeit aufzurufen (z. B. täglich um 12 Uhr morgens, nennen Sie diese Funktion). Ich beziehe mich nicht darauf, einen Prozess mit Crontab aufzurufen, sondern eine Funktion innerhalb eines langjährigen Daemons.

Vielen Dank

War es hilfreich?

Lösung

Verwenden Sie SetTimer mit itimer_real und lassen Sie Ihre Funktion vom Handler für Sigalarm aufgerufen.

Andere Tipps

Ich verstehe, dass Sie einen Shell -Daemon ausführen. Mein Vorschlag ist also, Crontab zu verwenden, da es bereits darauf wartet, verwendet zu werden, um Ihren Daemon zu signalisieren.

In Ihrem Shell -Daemon benötigen Sie einen Signalhandler

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

Sie müssen ein Signal, Sigalrm in diesem Beispiel

    trap handler ALRM

Und in Ihrem Crontab senden Sie das Signal, vorausgesetzt, Ihr Daemon ist Daemon.sh

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

Vergleichen Sie die aktuelle Zeit mit der Zeit, in der Sie ausgeführt werden sollten, und wenn sie später als ausgeführt ist, und dann die Zeit zurücksetzen.

Mein Lieblingstrick ist:

  • Schlaf und wecke alle n -ten Sekunden (ich persönlich bevorzuge entweder jede Sekunde oder alle 10 Sekunden)
  • Wenn Sie aufgeweckt sind, überprüfen Sie die Zeit und prüfen Sie, ob ich etwas ausführen muss
  • Spülen, wiederholen ...

Wie Sie dies tun, hängt von Ihrer Sprache ab. In TCL würde ich so etwas tun wie:

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!
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top