Pergunta

Qual é a melhor maneira de chamar uma função dentro de um daemon Linux em intervalos de tempo específicos e horário específico (por exemplo, às 12h todos os dias, chame essa função). Não estou me referindo a chamar um processo com Crontab, mas uma função dentro de um daemon de longa duração.

Obrigado

Foi útil?

Solução

Use o settimer com Itimer_real e peça à sua função chamada pelo manipulador para SigalarMr.

Outras dicas

Das suas tags de perguntas, eu entendo que você está executando um daemon da Shell. Portanto, minha sugestão é usar o Crontab, pois já está esperando para ser usado, para sinalizar seu daemon.

Em seu daemon da concha, você precisa de um manipulador de sinal

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

você tem que prender um sinal, sigalrm neste exemplo

    trap handler ALRM

e em seu crontab enviar o sinal, assumindo que seu daemon seja daemon.sh

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

Compare o horário atual com o tempo em que você deve estar em execução e, se for posteriormente na execução, e depois redefine o tempo.

Meu truque favorito é:

  • Durma e acorde a cada enésimo segundos (eu pessoalmente prefiro a cada segundo ou a cada 10 segundos)
  • Quando acorde, verifique a hora e verifique se eu preciso executar alguma coisa
  • Enxágue, repita ...

Como você faz isso depende do seu idioma. Em TCL, eu faria algo como:

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!
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top