Функция вызова с определенными временными интервалами в Linux

StackOverflow https://stackoverflow.com/questions/2145845

  •  23-09-2019
  •  | 
  •  

Вопрос

Как лучше всего вызвать функцию внутри демона Linux через определенные временные интервалы и определенное время (например, в 12:00 каждый день, назовите эту функцию). Я имею в виду не называть процесс с Crontab, а функцию в долгосрочном демона.

Спасибо

Это было полезно?

Решение

Используйте SetTimer с itimer_real и позвольте вашей функции вызвать обработчик для Sigalarm.

Другие советы

Из ваших тегов вопросов я понимаю, что вы управляете демон -оболочкой. Поэтому я предлагаю использовать Crontab, так как он уже ожидает использования, чтобы сигнализировать ваш демон.

В твоем оболочке вам нужен обработчик сигнала

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

Вы должны поймать сигнал, SIGALRM в этом примере

    trap handler ALRM

и в вашем Crontab отправьте сигнал, предполагая, что ваш демон - Daemon.sh

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

Сравните текущее время со временем, которое вы должны работать, и если оно будет позже, чем запустить, а затем сбросить время.

Мой любимый трюк:

  • Спи и просыпаться каждые nte секунд (я лично предпочитаю каждую секунду или каждые 10 секунд)
  • Когда проснетесь, проверьте время и проверьте, нужно ли мне что -нибудь запустить
  • Промойте, повторите ...

Как вы это делаете, зависит от вашего языка. В TCL я бы сделал что -то вроде:

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!
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top