Linux'ta her 10 saniyede bir çalışan bir cron işini nasıl zamanlayabilirim?


15

Her dakikayı nasıl yapacağımı biliyorum, ama her 10 saniyede bir?

Yanıtlar:


10

İşi her on saniyede bir planlayamazsınız, ancak işi her dakika çalışacak şekilde zamanlayabilir ve 10 saniye aralıklarla bir döngüde uyuyabilirsiniz. Bu, on saniyelik aralık sona ermeden önce komutunuzun tamamlanmasıyla ilgili olabilir veya bir sonraki komut çalıştığında çakışır. Bu güvencesiz bir çözüm gibi geliyor, ancak komut dosyasının ana komutunun çok kısa bir şekilde yürütülmesini garanti ederseniz, işe yarayacaktır.

#!/bin/bash
i=0

while [ $i -lt 6 ]; do
  /run/your/command &
  sleep 10
  i=$(( i + 1 ))
done

Benzer bir şey yapıyorum ... Sadece crontab içinde * 's kullanın ve sonra benim komut dosyası sonsuza kadar sürüsü ve döngüler kullanır, bir kilit elde edemez sürece asla çıkar.
Peter

22

Geçen hafta benzer bir görevim vardı. Çözümlerim standart cron girişlerini istenen frekansa çarpmaktı. Crontab'ım şöyle:

* * * * * /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 10; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 20; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 30; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 40; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 50; /usr/local/bin/php /var/www/myscript.php

Myscript.php sonuçlarını kontrol etmek istiyorsanız, örneğin hata ayıklama için, sadece

&> /tmp/myscipt.log

yukarıdaki crontab'daki her satıra. Sonra stderr ve stdout günlük dosyasına yönlendirilir.


2
Yaratıcı cron kullanımı için +1
shodanshok

2
Bu en iyi çözüm IMHO. Ne yaptığı açıktır ve bir komut dosyası veya üçüncü taraf çözümü gerektirmez.
Jeremy


0

Cron sadece en az bir dakika izin verir. Bunu deneyebilirsiniz -

* * * * * ( sleep 10 ; /usr/bin/wget http://api.us/application/)

0

10 saniyenin altına, örneğin 5 saniyeye gitmek istiyorsanız, böyle bir komut dosyasıyla bir işçi döngüsü oluşturmanızı öneririz:

#!/bin/bash

INTERVAL=5
while true; do

  echo "do something"

  # wait for next interval
  WAIT_UNTIL=$(($(date +%s) + $INTERVAL))
  while [ $(date +%s) -lt $WAIT_UNTIL ]; do
    sleep 1
  done

done

İkinci saniyeye gitmeniz gerekiyorsa, tarih komutuna mikrosaniye ekleyin.


0
* * * * * script to run
* * * * * sleep 10; script to run
* * * * * sleep 20; script to run

Burada komut dosyası 10 saniyelik aralıklarla çalıştırılabilir ...


Bu çözüm 5 yıl önce gönderildi. Tekrar göndermek yerine sadece oy vermelisiniz.
Gerald Schneider
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.