وظيفة الاتصال على فترات زمنية محددة في Linux

StackOverflow https://stackoverflow.com/questions/2145845

  •  23-09-2019
  •  | 
  •  

سؤال

ما هي أفضل طريقة لاستدعاء وظيفة داخل 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!
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top