GNU/Linux >> Znalost Linux >  >> Linux

Nejlepší způsob, jak zajistit, aby se skript spouštěl jednou za období?

Potřebuji, aby se určitý skript spouštěl jednou za měsíc (ostatní, kteří si prohlížejí tuto otázku, mohou potřebovat, aby se spouštěl jednou za den/týden/rok/5 dní atd.).

Vím, že k tomu mohu použít cron s:

0 0 1 * * ./script.sh

Ale co když je stroj náhodou během tohoto intervalu offline (jako příklad se vypne 1. den v konkrétním měsíci).

Existuje elegantní řešení tohoto? Nebo bych musel do tohoto skriptu zahrnout podprogram, abych nastavil I've-run-this-month-already hodnotu a pak každý den v měsíci (nebo při spouštění) spustí další skript, aby tuto hodnotu zkontroloval?

Aktualizace:

Potřebuji, aby se můj skript spouštěl jednou za měsíc na samém začátku měsíce. Při psaní skriptu k provedení řady věcí jsem vytvořil níže uvedený kus kódu. Dávám to sem jen pro případ, že to někomu přijde užitečné, až najde tuto otázku.

# CHECK FOR THE OLD_MONTH FILE
if [ ! -e /usr/local/bin/system/old_month ]; then
        # CREATE IT IF IT DOESN'T EXIST WITH THIS MONTHS DATE
        echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/old_month
fi

# CREATE A NEW FILE EVERY TIME THIS SCRIPT IS RUN WITH THIS MONTHS DATE
echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/this_month

# CHECK IF OLD_MONTH AND THIS_MONTH ARE NOT THE SAME
if ! cmp /usr/local/bin/system/this_month /usr/local/bin/system/old_month > /dev/null 2>&1 ;
then
        # RUN YOUR RELEVANT CODE HERE #
        echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/old_month     # UPDATE THE VALUE IN OLD_MONTH SO THAT THEY WILL MATCH NEXT TIME
fi

Přijatá odpověď:

K tomu můžete použít Anacron, je navržen tak, aby spouštěl úlohy v určitých intervalech, aniž by se předpokládalo, že je systém nepřetržitě zapnutý. Pokud se má úloha spouštět každý měsíc, Anacron zkontroluje, zda byla spuštěna v předchozím měsíci, a pokud ne, spustí ji (a nezapomeňte, že ji nemusí spouštět znovu další měsíc).

V derivátech Debianu Anacron pěkně spolupracuje s Cronem, aby se postaral o /etc/cron.{daily,weekly,monthly} vhodně (takže jednoduše definujete svůj měsíční úkol jako měsíční úkol v /etc/cron.monthly a bude správně spuštěn).

Na jiných systémech byste svůj měsíční úkol definovali v /etc/anacrontab .


Linux
  1. Jak spustit skript??

  2. Zkompilujte PHP skript v Linuxu

  3. Po přihlášení spusťte bash skript

  1. Spustit příkaz, který je zastíněn aliasem?

  2. Nejlepší způsob, jak zjistit (ze skriptu), zda je software nainstalován?

  3. Jak spustit „find -exec {};?

  1. Jak zajistit, aby skript Shell vždy běžel jako root?

  2. Spustit skript s argumenty jako uživatel?

  3. Odkud se spouští skript Shell?