在特定时间间隔和特定时间内调用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!
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top