it-swarm.dev

Jak spouštět skripty každých 5 sekund?

Mám skript, který je třeba spustit každých pět sekund. Vím, že cron umí dělat úkoly za minutu, ale existuje způsob, jak spustit něco každou vteřinu?

70
myusuf3

Cron umožňuje pouze minimálně jednu minutu. můžete udělat, je napsat skript Shell s nekonečnou smyčkou, která spustí váš úkol, a pak spí po dobu 5 sekund. Tímto způsobem bude váš úkol spuštěn více či méně každých 5 sekund, v závislosti na tom, jak dlouho samotný úkol trvá.

#!/bin/bash

while true; do
  # Do something
  sleep 5;
done

Můžete vytvořit my-task.sh soubor s výše uvedeným obsahem a spusťte jej pomocí sh my-task.sh. Volitelně ji můžete nakonfigurovat jako službu supervisor, aby se spustila při spuštění systému atd.

Opravdu to zní, jako byste dělali něco, co byste pravděpodobně neměli dělat. To je špatné .

67
Tommy Brunn

Každou minutu můžete spustit skript cron, který spustí 12 procesů na pozadí:

* * * * * ~/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) &

Moje otázka je však Co na EARTH , mohl byste dělat, že musíte běžet každých 5 sekund?

40
warren

Stačí použít smyčku:

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

Tím se spustí váš skript jako úloha na pozadí, 5 sekund spánku a poté opět opakovat. K jeho zrušení můžete použít Ctrl-C, nebo místo true použít jakoukoli jinou podmínku, např. ! test -f /tmp/stop-my-script pouze smyčka, zatímco soubor /tmp/stop-my-script neexistuje.

28
blueyed

Dalo by se použít balíček GNU ) mcron , alternativa „Vixie cron“.

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

"Může snadno umožnit určení jemnějších časových bodů, tj. Sekund. V zásadě by to mohlo být rozšířeno na mikrosekundy, ale to není implementováno."

10
David

Použijte kaktusy ke sledování routeru a přepínání, ale Cron umožňuje pouze minimálně jednu minutu, takže pokud je jeden port/zařízení dole, není varování před dvěma minutami.

2
qttty

Minimální konfigurace v cronu je minut, nemůžete ji nastavit na 5 sekund. Dalo by se použít Quartz, který umožňuje sekundy. http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html

2
Cody Harlow

Můžete použít časovač UnitD, který spustí službu - kterou byste nastavili tak, aby dělal co chcete - každých 5 sekund.

Předpokládejme, že se vaše servisní jednotka nazývá mystuff.service a je nainstalován v /etc/systemd/system (podívejte se živatelské služby SystemD , pokud chcete nahradit crontab uživatele), pak můžete napsat časovač pro spuštění služby v době spuštění a pak každých 5 sekund, jako je tato:

/etc/systemd/system/mystuff.timer

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

Poté znovu načtěte konfiguraci systému, aktivujte jednotku časovače a spusťte ji.

2
Guss

Udělal jsem takovou věc velmi úspěšně (a konečný výsledek je v řádu týdnů najednou, dokud není stroj restartován). Pokud jde o to, co jsem právě dělal, aktualizace informací a jejich uložení do mezipaměti - aktualizace každých 10 sekund.

#!/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' restartuje skript, ale nahrazuje běžící skript. To může být zpočátku spuštěno crontab '@reboot' řádek.

1
Alister Bulman