GNU/Linux >> Znalost Linux >  >> Linux

Mohu spouštět úlohu cronu častěji než každou minutu?

Řešení 1:

Kandidát na nejkreativnější zneužití příkazu Linux:

nohup watch -n 30 --precise yourprog >/dev/null &

Pokud yourprog sestává z:

date +%M.%S.%N >> yourprog.out

pak yourprog.out může vypadat takto:

50.51.857291267
51.21.840818353
51.51.840910204
52.21.840513307
52.51.842455224
53.21.841195858
53.51.841407587
54.21.840629676

což naznačuje docela dobrou úroveň přesnosti.

Zde je vysvětlení částí příkazu:

  • nohup - Tím zůstane příkaz, který následuje, watch v tomto případě z ukončení při ukončení terminálu.
  • watch - Tento program spouští příkaz opakovaně. Normálně se první obrazovka výstupu z příkazu zobrazí pokaždé, když watch spustí příkaz.
  • -n 30 - Interval, ve kterém se má příkaz spustit. V tomto případě je to každých třicet sekund.
  • --precise - Bez této možnosti watch spustí příkaz po interval sekundy. S ním každé spuštění příkazu začíná zapnuto interval pokud možno. Pokud by tato možnost nebyla v příkladu uvedena, časy by se pokaždé prodloužily o více než 30 sekund kvůli času potřebnému ke spuštění a provedení příkazu (yourprog ).
  • yourprog - Program nebo příkazový řádek pro watch provést. Pokud příkazový řádek obsahuje znaky speciální pro shell (např. mezeru nebo středník), bude nutné je uvést v uvozovkách.
  • >/dev/null - Větší než přesměruje výstup příkazu spouštěného watch do souboru, /dev/null . Tento soubor zahodí všechna data do něj zapsaná. Tím se zabrání zápisu výstupu na obrazovku nebo od nohup Pokud je používán, zabraňuje odesílání výstupu do souboru s názvem nohup.out .
  • &watch příkaz je spuštěn na pozadí a řízení je vráceno terminálu nebo rodičovskému procesu.

Všimněte si, že nohup , přesměrování výstupu a & Operátory ovládání na pozadí nejsou specifické pro watch .

Zde je vysvětlení příkladu yourprog skript:

  • date - Zobrazí aktuální datum a/nebo čas. Může je také nastavit.
  • +%M.%S.%N - Toto určuje výstupní formát pro date použít. %M je aktuální minuta, %S je aktuální sekunda a %N je aktuální nanosekunda.
  • >> yourprog.out - Toto přesměruje výstup date příkaz do souboru s názvem yourprog.out . Dvojité větší než způsobí, že výstup bude připojen k souboru při každém vyvolání, nikoli přepsání předchozího obsahu.

Upravit :

Možná další věc, která by mohla být zneužita (nebo je to možná legitimní použití), jsou systémové časovače.

Viz systemd/Timers jako náhrada cronu a Cron vs systemd timers.

Brzy se pokusím zveřejnit příklad.

Řešení 2:

Pokud vaše úloha potřebuje spouštět tak často, cron je špatný nástroj. Kromě toho, že jednoduše nebude spouštět úlohy tak často, riskujete také vážné problémy, pokud úloha trvá déle, než je interval mezi spouštěním. Přepište svou úlohu tak, aby byla démonizována a trvale běžela, a v případě potřeby ji spusťte z cronu (a přitom se ujistěte, že se znovu nespustí, pokud již běží).

Řešení 3:

Cron je navržen tak, aby se probouzel každou minutu, takže to není možné udělat bez nějakého hackování, například spánku, jak jste zmínil.

Řešení 4:

* * * * * /path/to/program
* * * * * sleep 30; /path/to/program

Nezapomeňte do svého programu něco zapsat, aby se ukončil, pokud již běží předchozí instance.

#!/bin/sh

if ln -s "pid=$$" /var/pid/myscript.pid; then
  trap "rm /var/pid/myscript.pid" 0 1 2 3 15
else
  echo "Already running, or stale lockfile." >&2
  exit 1
fi

Samozřejmě to stále ponechává velmi malou příležitost k selhání, takže hledejte na Googlu lepší řešení použitelné pro vaše prostředí.

Řešení 5:

Můžete to provést pomocí softwaru třetí strany.

Možnost, která se mi osvědčila, je časté cron

Umožňuje přesnost na milisekundy a dává vám možnost odložit další spuštění, dokud aktuální neskončí..


Linux
  1. Jak spouštět Cronjobs častěji než jednou za minutu?

  2. Spuštění úlohy cronu na Linuxu každých šest hodin

  3. Jak spustit úlohu cron každou hodinu a 10 minut

  1. Proč moje úloha cron.d za minutu neběží?

  2. Spuštění Cron každé 2 hodiny

  3. jak spustit cron job každé 3 měsíce?

  1. Jak nastavit úlohu cron, aby každou hodinu spouštěla ​​spustitelný soubor?

  2. Linux:Spusťte úlohu cron v popředí

  3. Jak spustit úlohu cronu každý den v určitou hodinu?