Функция вызова с определенными временными интервалами в Linux
Вопрос
Как лучше всего вызвать функцию внутри демона 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!