Nastavení Crontab

Nastavení Crontab
« kdy: 06. 11. 2019, 14:01:17 »
Ahoj,

Chtěl bych požádat o pomoct při konfigurací CRONTAB tak, aby:
 
skript1.sh bude spuštěný: Každý pátek v měsíci kromě posledního pátku v měsíci.
skript2.sh bude spuštěný: Každý poslední pátek v měsíci.

btw: Nechci, aby skript1.sh a skript2.sh běžel jakýkoli pátek souběžně.

Předem díky.
« Poslední změna: 06. 11. 2019, 14:27:10 od Petr Krčmář »


Re:Nastaveni Crontab
« Odpověď #1 kdy: 06. 11. 2019, 14:13:00 »
nechcete mít jeden skript, spouštěný každý pátek, a v něm mít if určující, jestli je poslední v měsíci nebo ne? a podle toho pustit příslušný kód?

Re:Nastaveni Crontab
« Odpověď #2 kdy: 06. 11. 2019, 14:17:25 »
nechcete mít jeden skript, spouštěný každý pátek, a v něm mít if určující, jestli je poslední v měsíci nebo ne? a podle toho pustit příslušný kód?

Pochopil jsem tedy správně, že takovou konfiguraci crontab neumožňuje, jsem rád, že mi něco neuniklo :)

Dobrá možnost if je lákavá. Podle čeho udělat test (kontrolu) na poslední pátek v měsící?

Re:Nastavení Crontab
« Odpověď #3 kdy: 06. 11. 2019, 14:31:25 »
Anebo zkusit systemd timers, podporu pro "last someday" maji.

https://www.freedesktop.org/software/systemd/man/systemd.time.html#Calendar%20Events

m-a

Re:Nastavení Crontab
« Odpověď #4 kdy: 06. 11. 2019, 14:33:12 »
Dobrá možnost if je lákavá. Podle čeho udělat test (kontrolu) na poslední pátek v měsící?

Napr. pripocitat 7 dni a skontrolovat ci sa nezmenil mesiac?


Re:Nastavení Crontab
« Odpověď #5 kdy: 06. 11. 2019, 16:12:15 »
Můžete si dovolit ten luxus, že jeden den za 28 let to bude fungovat špatně? Pokud ano, tak mě napadá řešení na 6 řádků v crontabu:
0 0 1-24 1,3,5,7,8,10,12 5 skript1
0 0 1-23 4,6,9,11 5 skript1
0 0 1-21 2 skript1
0 0 25-31 1,3,5,7,8,10,12 5 skript2
0 0 24-30 4,6,9,11 5 skript2
0 0 22-28 2 skript2

Ale jak už tu zaznělo, ten nápad pustit každý pátek a zjistit, jestli za týden je stejný měsíc, je lepší.

Re:Nastavení Crontab
« Odpověď #6 kdy: 07. 11. 2019, 08:45:48 »
Dobrá možnost if je lákavá. Podle čeho udělat test (kontrolu) na poslední pátek v měsící?

Napr. pripocitat 7 dni a skontrolovat ci sa nezmenil mesiac?

Tak jsem to vyresil svym zpusobem. Dekuju vsem za nakopnuti :)

Kód: [Vybrat]
#!/bin/bash
TODAY=$(date +%d)
LASTFRI=$(cal | tail -2 | head -1 | cut -d' ' -f6)

if [ $TODAY -ne $LASTFRI ]; then
  echo "Dnesek neni posledni den v mesici"
else
  echo "Dnesek je posledni den v mesici"
fi

Re:Nastavení Crontab
« Odpověď #7 kdy: 07. 11. 2019, 11:08:19 »
Dobrá možnost if je lákavá. Podle čeho udělat test (kontrolu) na poslední pátek v měsící?

Napr. pripocitat 7 dni a skontrolovat ci sa nezmenil mesiac?

Tak jsem to vyresil svym zpusobem. Dekuju vsem za nakopnuti :)

Kód: [Vybrat]
#!/bin/bash
TODAY=$(date +%d)
LASTFRI=$(cal | tail -2 | head -1 | cut -d' ' -f6)

if [ $TODAY -ne $LASTFRI ]; then
  echo "Dnesek neni posledni den v mesici"
else
  echo "Dnesek je posledni den v mesici"
fi

Tato podminka by nefungovala spravne, pokud by mesic koncil jinym, dnem nez sobota nebo patek, takze edit:

Kód: [Vybrat]
cal | awk {'print $6'} | xargs | awk '{print $NF}'

m-a

Re:Nastavení Crontab
« Odpověď #8 kdy: 08. 11. 2019, 10:19:20 »
Ak pouzivas GNU date a bash, tak sa da pouzit aj nasledovne:

Kód: [Vybrat]
#!/bin/bash

read -r TODAY TODAY_MONTH WEEKDAY <<< $(date "+%Y-%m-%d %m %A")
NEXT_WEEK_MONTH=$(date -d "$TODAY 7 days" +%m)
[[ $TODAY_MONTH -eq $NEXT_WEEK_MONTH ]] && echo "Not the last $WEEKDAY of the month" || echo "Last $WEEKDAY of the month"