Skript - letzten Samstag im Monat

L

luk3

Jungspund
Hallo zusammen,

ich möchte gerne unser backup über ein skript starten lassen, dieses soll aber nur am letzten Samstag im Monat laufen.
Ich habe mich da schon was umgehört und auch was vorbereitet.

Wenn ich das skript in der bash direkt ausführe, wird mir das richtige datum ausgegeben. Wenn ich jedoch das skript über ein cronjob ausführen lasse, verschiebt sich das zieldatum um einen tag nach hinten.

Beispiel:
Angenommen, heute ist der 29. der letzte Samstag im Monat und ich führe das skript in der bash aus.
- es wird mir angezeigt, dass der 29. der letzte samstag im monat ist und das heute der 29. ist.

Wird das skript aus der crontab herraus aufgerufen, wird angezeigt das der 30. der letzte samstag im monat wäre und heut der 29. ist! Hier ist irgendwo ein fehler ....

Anbei ein stück des Codes ...

Code:
#!/bin/bash
# Pruefen ob letzter Samstag im Monat
let when=`cal | cut -d ' ' -f6 | egrep "[0-9]{2}" | tail -n1`
echo $when

let now=`date "+%d"`
echo $now

if [ $when -eq $now ];
then
        echo "letzter samstag"
else
        echo "kein letzter samstag"
fi
exit 0;

Habt ihr damit erfahrungen und könnt weiterhelfen?
 
warum nicht einfac mit cron selbst lösen ?

man crontab:
To request the last Monday, etc. in a month, ask for the “5th” one. This will always match the last Monday, etc., even if there are only
four Mondays in the month:

# MIN HOUR DAY MONTH DAYOFWEEK COMMAND
# run date at 11 am on the first and last Mon, Tue, Wed of each month
0 11 1,5 * mon-wed date

also für dich z.B. 0 0 5 * sat /path/to/script
 
weil ich bisher keine information gefunden habe, dies mit cron zu lösen. Google hat mir auch keine möglichkeit aufgezeigt und bin dann auf ein zusatz-skript umgestiegen.

Werde das mal testen, danke für den tipp.
 
hmmh ... allerdings

benutze ich dcron (dillon's lightweight cron daemon) unter arch linux

unter debian vixiecron, und da finde ich das auch nicht in der manpage, also keine ahnung obs überhaupt so geht
 
aha, ich nutze CentOs und RedHat als Betriebssystem. Werd das dennoch mal testen.
 
Hab da keine möglichkeit sowas zu konfigurieren. Die crontag ist ja wie folgt aufgebaut

Minute | Stunde | Tage (1-31) | Monat (1-12) | Wochentag (1-7 o. Mon-Sun).


Vielleicht im skript was anders?
 
War da nicht was mit absoluten Pfaden, wenn es um cron geht? Damit kenne ich mich aber nicht aus.

Du könntest dem "cal" in Deinem Script mal explizit den Monat und das Jahr mit angeben. Oder einen anderen Algorithmus benutzen, um festzustellen, ob der letzte Samstag des Monats erreicht ist:
Code:
#!/bin/bash

if [ $( /bin/date +%w ) = 6 ]; then
  if [ "$( /bin/date -d +7days +%m )" != "$( /bin/date +%m )" ]; then
    echo "Heute ist der letzte Samstag des Monats"
  else
      echo "Heute ist nicht der letzte Samstag des Monats"
  fi
else
  echo "Heute ist kein Samstag"
fi
 
Hi, mit deinem skript läuft das besser.

Danke für die hilfe.
 

Ähnliche Themen

skript zum löschen doppelter dateien

Last mit etc/passwd anzeigen lassen

Zurück
Oben