وظيفة الاتصال على فترات زمنية محددة في Linux
سؤال
ما هي أفضل طريقة لاستدعاء وظيفة داخل Linux Daemon على فترات زمنية محددة ، ووقت محدد (على سبيل المثال في الساعة 12 صباحًا كل يوم ، اتصل بهذه الوظيفة). أنا لا أشير إلى استدعاء عملية مع Crontab ، ولكن وظيفة ضمن خفي طويلة المدى.
شكرًا
المحلول
استخدم setTimer مع itimer_real ويتم استدعاء وظيفتك من قبل معالج Sigalarm.
نصائح أخرى
من علامات سؤالك ، أفهم أنك تقوم بتشغيل خفي قذيفة. لذا فإن اقتراحي هو استخدام Crontab ، لأنه ينتظر بالفعل استخدامه للإشارة إلى الخفي.
في الخفي الخاص بك ، تحتاج إلى معالج إشارة
handler() {
echo "$(date): doing something special" >> $LOG
}
يجب عليك فخ إشارة ، sigalrm في هذا المثال
trap handler ALRM
وفي crontab الخاص بك ، أرسل الإشارة ، على افتراض أن الخفي هو Daemon.sh
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!