it-swarm-tr.com

Her 5 saniyede bir komut dosyaları nasıl çalıştırılır?

Her beş saniyede bir çalışması gereken bir senaryom var. cron'in her dakika işi yapabileceğini biliyorum, ama her saniyede bir şey yapmanın bir yolu var mı?

65
myusuf3

Cron sadece bir dakika için izin verir. Yapmanız gereken yapabildiğiniz, görevinizi çalıştıran sonsuz döngüye sahip bir Shell betiği yazmak ve ardından 5 saniye bekletmektir. Bu şekilde, görevin ne kadar sürdüğüne bağlı olarak göreviniz her 5 saniyede bir veya daha az çalıştırılır.

#!/bin/bash

while true; do
  # Do something
  sleep 5;
done

Yukarıdaki içeriğe sahip bir my-task.sh dosyası oluşturabilir ve sh my-task.sh ile çalıştırabilirsiniz. İsteğe bağlı olarak, bir servis olarak supervisor ile sistem önyükleme yaparken başlayacağı şekilde yapılandırabilirsiniz.

Gerçekten de yapmamanız gereken bir şey yapıyormuşsunuz gibi geliyor. Bu yanlış hissediyor.

64
Tommy Brunn

Bu nedenle, 12 arka planlı işlemi başlatan her dakika bir cron işi betiğine sahip olabilirsiniz:

* * * * * ~/dostuff.sh

dostuff.sh:

(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &

Ancak sorum şu: DÜNYA ne olursa olsun her 5 saniyede bir çalışması gereken ne yapıyor olabilirsiniz?

35
warren

Sadece bir döngü kullanın:

while true ; do ./your-script & sleep 5; done

Bu, betiğinizi arka plan işi olarak başlatacak, 5 saniye uyuyacak ve tekrar döngü başlatacak. İptal etmek için Ctrl-C kullanabilirsiniz ya da true yerine başka herhangi bir koşulu kullanabilirsiniz; ! test -f /tmp/stop-my-script, yalnızca /tmp/stop-my-script dosyası bulunmadığında döngü içine alır.

27
blueyed

"Vixie cron" alternatifi olan GNU paketini mcron kullanabilirsiniz.

http://www.gnu.org/software/mcron/manual/mcron.html#Top

"Daha ince zaman noktalarının, yani saniyelerin belirlenmesine kolayca izin verebilir. Prensipte bu, mikrosaniye genişletilebilir, ancak bu uygulanmaz."

10
David

Yönlendiriciyi izlemek ve değiştirmek için kaktüsler kullanın, ancak Cron yalnızca en az bir dakika izin verir, bu nedenle bir bağlantı noktası/aygıt çökerse, iki dakika geçmeden uyarı vermez.

2
qttty

Cron cinsinden minimum konfigürasyon dakikadır, 5 saniye ayarlayamazsınız. Saniyeye izin veren Quartz kullanabilirsiniz. http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html

2
Cody Harlow

Her 5 saniyede bir, istediğinizi yapacak şekilde ayarlamış olduğunuz bir servisi tetikleyecek olan SystemD zamanlayıcı birimini kullanabilirsiniz.

Servis ünitenizin mystuff.service olarak adlandırıldığını ve /etc/systemd/system (kurgu SystemD kullanıcı hizmetleri içinde bir kullanıcının crontab'ını değiştirmek istiyorsanız) yüklü olduğunu varsayalım. Hizmeti önyükleme zamanında ve ardından her 5 saniyede bir çalıştırmak için,

/etc/systemd/system/mystuff.timer

[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target

Ardından sistem konfigürasyonunu yeniden yükleyin, zamanlayıcı ünitesini etkinleştirin ve başlatın.

2
Guss

Bu tür şeyleri çok başarılı bir şekilde yaptım (ve sonuç, makine yeniden başlatılıncaya kadar bir kerede haftalarca sürecek) Şu anda ne yaptığımı gelince, bilgileri güncelleme ve önbelleğe alma - her 10 saniyede bir güncelleme.

#!/bin/sh

SLEEP=5

# do stuff
sleep $SLEEP

# do stuff
sleep $SLEEP

# do stuff
sleep $SLEEP

# do stuff
sleep $SLEEP

# echo and restart...
exec $0

'Exec $ 0' komut dosyasını yeniden başlatır, ancak çalışan komut dosyasını değiştirir. Başlangıçta bir crontab '@reboot' satırıyla başlatılabilir.

1
Alister Bulman