题
在特定时间间隔和特定时间内调用Linux守护程序内部功能的最佳方法是什么(例如,每天12点,致电此功能)。我不是指使用Crontab调用一个过程,而是指在长期运行的守护程序中的功能。
谢谢
解决方案
将settimer与itimer_real一起使用,并由处理程序调用Sigalarm的功能。
其他提示
从您的问题标签中,我了解您正在运行Shell Daemon。因此,我的建议是使用crontab,因为它已经在等待使用,以向您的守护程序发出信号。
在您的外壳守护程序中,您需要一个信号处理程序
handler() {
echo "$(date): doing something special" >> $LOG
}
您必须捕获信号,在此示例中sigalrm
trap handler ALRM
并在您的crontab中发送信号,假设您的守护程序是守护程序。
0 0 * * * killall -s SIGALRM daemon.sh
将当前时间与您应该运行的时间进行比较,并且是否晚于运行,然后重置时间。
我最喜欢的技巧是:
- 睡眠和每秒钟醒来(我个人更喜欢每秒钟或每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!
不隶属于 StackOverflow