Fórum Root.cz

Hlavní témata => Software => Téma založeno: Clee-Shock 06. 11. 2019, 14:01:17

Název: Nastavení Crontab
Přispěvatel: Clee-Shock 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.
Název: Re:Nastaveni Crontab
Přispěvatel: Daniel Novotný 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?
Název: Re:Nastaveni Crontab
Přispěvatel: Clee-Shock 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í?
Název: Re:Nastavení Crontab
Přispěvatel: czechsys 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
Název: Re:Nastavení Crontab
Přispěvatel: m-a 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?
Název: Re:Nastavení Crontab
Přispěvatel: Justas 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ší.
Název: Re:Nastavení Crontab
Přispěvatel: Clee-Shock 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
Název: Re:Nastavení Crontab
Přispěvatel: Clee-Shock 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}'
Název: Re:Nastavení Crontab
Přispěvatel: m-a 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"