在特定时间间隔和特定时间(例如,每天上午12点,调用此函数)在Linux守护程序内调用函数的最佳方法是什么。我不是指使用crontab调用进程,而是在长时间运行的守护进程中调用函数。
由于
答案 0 :(得分:1)
将settimer与ITIMER_REAL一起使用,并让SIGALARM的处理程序调用你的函数。
答案 1 :(得分:1)
从您的问题标签中我了解到您正在运行shell守护程序。所以我的建议是使用crontab,因为它已经在等待使用它来发信号通知你的守护进程。
在你的shell守护进程中,你需要一个信号处理程序
handler() {
echo "$(date): doing something special" >> $LOG
}
你必须捕获一个信号,在这个例子中是SIGALRM
trap handler ALRM
并在你的crontab中发送信号,假设你的守护进程是daemon.sh
0 0 * * * killall -s SIGALRM daemon.sh
答案 2 :(得分:0)
将当前时间与您应该运行的时间进行比较,如果它晚于运行时间,然后重置时间。
答案 3 :(得分:0)
我最喜欢的技巧是:
如何执行此操作取决于您的语言。在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!