質問
特定の時間間隔で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!
所属していません StackOverflow