在Linux中以特定时间间隔调用函数

时间:2010-01-27 09:54:30

标签: linux shell daemon

在特定时间间隔和特定时间(例如,每天上午12点,调用此函数)在Linux守护程序内调用函数的最佳方法是什么。我不是指使用crontab调用进程,而是在长时间运行的守护进程中调用函数。

由于

4 个答案:

答案 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)

我最喜欢的技巧是:

  • 每隔N秒睡觉并醒来(我个人更喜欢每秒或每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!