GNU/Linux >> Znalost Linux >  >> Linux

V Crontab obecný způsob, jak zadat každých n minut, kde n > 60

Musíte si to spočítat sami, abyste přišli s požadovanými úkoly, abyste dosáhli svého načasování.

0 0-23/7 * * * whatever
30 3-23/7 * * * whatever

Z těchto dvou příkladů lze odvodit jednoduchý algoritmus (při 30minutovém offsetu):

  • Přidejte dva záznamy:jeden s posunem 0 minut a druhý s posunem 30 minut.
  • Zadejte šířku rozsahu hodin rovnající se duration * 2 .
  • Zadejte časový posun:jeden začíná 0 a druhý začíná trváním po vyřazení 30minutové části.

Pokud budete více přemýšlet, můžete podobná řešení vymyslet každých 75 minut.

Upravit:

Cron nelze použít pro všechny typy naplánovaných úloh. Například provedení úlohy jednou za měsíc poslední den v měsíci. Nemůžete to udělat jednoduše pomocí cronu, protože poslední den v měsíci se mění z měsíce na druhý. Chcete-li to vyřešit, můžete spustit úlohu cron v možném rozsahu hodnot posledního dne v měsíci (28-31) a ověřit, zda je ve skriptu skutečně poslední den, nebo ne, než provedete skutečnou úlohu.


Vložte výsledek příkazu

date +%s

v proměnné ve vašem crontab. Něco jako ČAS=1497950105. Nyní ve vašem crontab potřebujete položku jako

* * * * * /bin/bash -c '[[ $(($(date +\%s)-TIME)) -gt seconds ]] && TIME=$(date +\%s) && whatever'

Kde sekundy je počet sekund, které chcete (12600 ve vašem případě).

Nebo pokud chcete počkat 3 hodiny a 30 minut po dokončení programu

* * * * * /bin/bash -c '[[ $(($(date +\%s)-TIME)) -gt seconds ]] && whatever && TIME=$(date +\%s)'

Upravit: Opravil jsem svou předchozí odpověď:

  • musíte ukončit znak % pomocí \, takže %s se změní na \%s
  • příkazu musíte předcházet /bin/bash -c

Jiné řešení (bez použití TIME) je:

 * * * * * /bin/bash -c '[[ $((($(date +\%s) / 60) % minutes)) -eq 0 ]] && whatever'

Kde minuty jsou ve vašem případě 210.

Úprava 2:

Jak navrhuje MSalters, je lepší spouštět záznam každých N minut, kde N je největší společný dělitel mezi 60 a vaším časovým intervalem v minutách


V tomto případě si myslím, že se jednoduše pokoušíte použít cron k něčemu, co není schopen udělat sám (samozřejmě kromě řešení, kde cron ve skutečnosti spouští pomocný skript pravidelně, v takovém případě bych tvrdil, že to není cron sám řeší problém).

Řešení s intervalem 3 hodiny 30 minut není zcela správné. Toto bylo dané řešení:

0 0-23/7 * * * whatever
30 3-23/7 * * * whatever

Důvod, proč je to špatně, je ten, že cron pak spustí úlohu v časech 21:00 a 00:00, což je interval 3 hodin místo 3 hodin 30 minut.

Obecné řešení pro všechny časové intervaly by muselo zvládnout případy, které se nerozdělují rovnoměrně do 24 hodin. I když se nerozděluje rovnoměrně na 24 hodin, rozděluje se rovnoměrně na týden! Nejjednodušší způsob, jak si to představit, je udělat dvě překrývající se sady „každých 7 hodin“, jako je tento:

0 0-23/7 * * 1 whatever
0 4-23/7 * * 2 whatever
0 1-23/7 * * 3 whatever
0 5-23/7 * * 4 whatever
0 2-23/7 * * 5 whatever
0 6-23/7 * * 6 whatever
0 3-23/7 * * 7 whatever
30 3-23/7 * * 1 whatever
30 0-23/7 * * 2 whatever
30 4-23/7 * * 3 whatever
30 1-23/7 * * 4 whatever
30 5-23/7 * * 5 whatever
30 2-23/7 * * 6 whatever
30 6-23/7 * * 7 whatever

To, že je něco dělitelné týdnem, je to nejlepší, co můžete udělat, protože měsíce nejdou dokonale v souladu s týdny, a jen tak je to proveditelné. Například interval přesně každých 12 minut je triviální na jednom řádku crontab, ale interval přesně každých 11 minut je nemožný, protože 10080 není dělitelné 11. (10080 je počet minut v týdnu).

Určitě by bylo možné napsat algoritmus, který by řešil případy, kdy je to možné, ale zjevně se to moc nevyplatí, zvlášť když vezmeme v úvahu, jak by řešení ve skutečnosti vypadalo.


Linux
  1. Jak upravit soubor na místě?

  2. Podezřelý vstup do Crontabu běží „xribfa4“ každých 15 minut?

  3. Jak zabránit uživateli bez oprávnění root ve vytváření záznamu crontab

  1. Uživatel nemůže upravit crontab, chyba:„/tmp/crontab.Lm34gsJV:Permission denied“

  2. Jak určit editor pro otevření souboru crontab? export EDITOR=vi nefunguje

  3. Nejjednodušší způsob, jak najít chybu segmentace

  1. Kde je protokol cron / crontab? / Jak povolit protokol Cron?

  2. Jak spustit crontab job každý týden v neděli

  3. crontab běží každých 15 minut mezi určitými hodinami