質問

特定の時間間隔でLinuxデーモン内の関数を呼び出す最良の方法と特定の時間(例えば、毎日午前12時に、この関数を呼び出します)。私はクロンタブでプロセスを呼び出すことではなく、長期にわたるデーモン内の関数に言及しています。

ありがとう

役に立ちましたか?

解決

itimer_realを使用してSettimerを使用し、Sigalarmのハンドラーによって機能を呼び出します。

他のヒント

あなたの質問タグから、私はあなたがシェルデーモンを実行していることを理解しています。ですから、私の提案は、すでに使用されるのを待っているため、crontabを使用することです。

シェルデーモンには、信号ハンドラーが必要です

   handler() {
      echo "$(date): doing something special" >> $LOG
   }

この例では、信号をトラップする必要があります。

    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