Her 15 saniyede bir Cron çalışıyor


18

Ne yazacağımı bana tavsiye eder misiniz, crontabböylece /usr/bin/chromium-browserher 15 saniyede bir iş (test için kullanacağım ) çalışır.


Crontab yerine başka bir olay yönetim sistemine güvenin, örneğin: Perl'nin every.pm modülü bunu yapmanıza yardımcı olacaktır.
Nikhil Mulley

Yanıtlar:


27

Cron ile bir dakika ayrıntı düzeyi altına giremezsiniz. Yapabileceğiniz şey, her dakika, işinizi yürüten, 15 saniye bekleyen ve tekrar eden bir komut dosyası çalıştırmaktır. Aşağıdaki crontab satırı başlayacaksome_job her 15 saniyede bir .

* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job

Bu komut dosyası, işin hiçbir zaman 15 saniyeden uzun sürmeyeceğini varsayar. Aşağıdaki biraz daha karmaşık komut dosyası, çalıştırılması çok uzun sürdüğünde bir sonraki örneği çalıştırmamaya özen gösterir. Biçimi datedesteklemeye dayanır %s(örn. GNU veya Busybox, böylece Linux'ta iyi olacaksınız). Doğrudan bir crontab'a koyarsanız, %karakterlerin \%bir crontab satırındaki gibi yazılması gerektiğini unutmayın .

end=$(($(date +%s) + 45))
while true; do
  some_job &
  [ $(date +%s) -ge $end ] && break
  sleep 15
  wait
done
[ $(date +%s) -ge $(($end + 15)) ] || some_job

Bununla birlikte, her 15 saniyede bir sıklıkta bir iş yürütmeniz gerekirse, cron'un muhtemelen yanlış bir yaklaşım olduğunu not edeceğim. Her ne kadar kısa ömürlü süreçlerde unices iyi olsa da, her 15 saniyede bir program başlatma yükü göz ardı edilemez (programın ne kadar talep edildiğine bağlı olarak). Uygulamanızı her zaman çalıştıramaz ve 15 saniyede bir görevini yerine getirmesini sağlayamaz mısınız?


ayrıca olabilir: i için 1 2 3 4 ; do some_job & sleep 15; done(son uyku bir sonraki çalıştırmayı etkilemez), ancak bunu yapmanın yolu giden cronjob postasının zamanlaması için muhtemelen daha iyidir (son some_job'dan hemen sonra gönderilir, 15'lerin sonunda benim varyant)
Olivier Dulac


13

Diğerlerinden farklı yaklaşım: Her biri 15 saniye kademeli 4 cronjobs çalıştırın:

* * * * * sleep 00; timeout 15s some_job
* * * * * sleep 15; timeout 15s some_job
* * * * * sleep 30; timeout 15s some_job
* * * * * sleep 45; timeout 15s some_job

İşin kendisine müdahale etmesini önlemek için, GNU coreutils ' aracılığıyla timeouther çalışma için çalışma süresini 15 saniyeyle sınırlandırıyoruz . Bununla birlikte, iş 15 saniyenin sonunda hemen çıkmazsa yine de sorun yaşayabileceğinizi unutmayın. Sorun haline gelirse bunu nasıl çözeceğinizle ilgili ayrıntılar için komut kılavuzuna bakın. Ayrıca, komut 15 saniyeden daha uzun sürerse ve zaman aşımı onu öldürürse, cronjob-e-postasını tetikleyecek sıfır olmayan bir çıkış durumu alırsınız.


Parlak, tekrarlayan da olsa.
Mike Kormendy

1
Güzel. Bir süreç uzun sürerse, bir sonraki süreç muhtemelen farklı bir çekirdeğe dönüşecektir. Cron işleri için kasıtlı olarak afinite ayarlayabileceğinizden emin değilsiniz, ancak bu bu yaklaşımı daha da iyi hale getirebilir.
Tim

@Zaman iyi bir nokta. Bir düzenlemede buna değinmiştim.
Otheus

2

Kısacası, cron zamanla bu kadar ayrıntılı değildir. Alacağınız en kısa süre 1 dakikadır.

#       .---------------- minute (0 - 59)
#       |       .------------- hour (0 - 23)
#       |       |       .---------- day of month (1 - 31)
#       |       |       |       .------- month (1 - 12) OR jan,feb,mar,apr ...
#       |       |       |       |       .----- day of week (0 - 6) (Sunday=0 or 7)  OR sun,mon,tue,wed,thu,fri,sat
#       |       |       |       |       |
#       *       *       *       *       *       command to be executed
        *       *       *       *       /usr/bin/chromium-browser

Ancak her 15 saniyede bir çalışacak bir komut dosyası yazabilirsiniz ...


* * * * * /usr/bin/chromium-browserCrontab'da bir çizgim var. El kitabına göre her dakika çalışmalı ama hiçbir şey çalışmıyor.
xralf

Böyle bir senaryo yazmak zor mu? Başka bir soru sormalı mıyım yoksa buraya yazılabilir mi?
xralf

Cron işlerinin bir terminali yok, bu yüzden tarayıcının başarısız olmasını beklerdim. Bunu sessizce yapabilir.
BillThor

Cron günlüklerim redhat türevleri için / var / log / cron, yani. fedora, centos vb. Ayrıca, tam olarak ne yapmaya çalıştığınızı açıklamanıza yardımcı olabilir, böylece insanlar neler olup bittiğini tam olarak görebilirler.
rfelsburg

1

Crontab'ınızda:

* * * *  /usr/bin/chromium-browser_starter

Sonra /usr/bin/chromium-browser_starter:

#!/bin/sh

# chromium-browser_starter
#
# Schedules /usr/bin/chromium-browser to run every 15 seconds for a minute.
# Intended to be called every minute through crond(8).

for ((secs=0; secs<46; secs+=15)); do
    (sleep $secs; /usr/bin/chromium-browser "$@") &
done

wait

Bir ps aux | grep chromdakika sonra yazdığımda krom tarayıcı çalıştığını göremiyorum.
xralf

@xralf - Komut dosyası en fazla birkaç saniye çalışır. Şaka yapmaya çalışın sleep.
amfetamachine
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.