Am 16.03.2012 10:49, schrieb Albrecht Mehl:
> Wie müßte das modifiziert werden, wenn die Aufgabenstellung nicht
> 'Am Monatsletzten', sondern 'Am letzten Arbeitstag im Monat' lautete?
Nach genauerer Überlegung macht ein Cronjob am letzten Arbeitstag des
Monats nur begrenzt Sinn. Wenn der letzte AT Freitag, 30. März ist
findet sich immer einer, der am Samstag, 31. März noch arbeitet. Daher
sollten Sicherungssjobs etc. einfach immer am kalendarisch Monatsletzten
stattfinden.
Wenn Du natürlich sagst "Den Backupjob muss ich aber abends noch
überwachen und das wäre doof, wenn der erst Sonntag läuft", da hab ich
mal was vorbereitet (Ausbau auf nen Cronjob hab ich dokumentiert).
Und wenn mir jemand noch ein Jahr und den Feiertag bringt wo zb.
Karfreitag auf den letzten AT im Monat fällt, dann bohre ich das gerne
nochmal auf (geht nicht, gibts nicht).
Bernd
# Letzten Arbeitstag des Monats ermitteln
#!/bin/bash
holiday=DE_HE #für gcal wenns genutzt wird, hier DE Hessen
read -p "Monat: " month
#month=3
# vornullen
month=$(printf "%02d" $month)
read -p "Jahr 4stellig: " year
# CRON
#year=$(date +%Y)
#month=$(date +%m)
# Letzter tag des Monats
day=$(cal $month $year | tr -d "\n" | awk '{print $NF}')
# Wenn Wochentag > Freitag, herunterzählen bis Freitag erreicht
while [ $(date --date=$year$month$day +%u) -gt 5 ]; do
let day=day-1
done
echo "Letzter Arbeitstag: $(date --date="$year$month$day" +%d.%m.%Y)"
# CRON
# if [ "$(date +%Y%m%d") == "$year$month$day"]; then
# echo "Heute ist letzter Arbeitstag des Monats"
# fi
# ggf noch feiertage parsen
#gcal %$year$month$day --holiday-list=short --cc-holidays=DE_HE | \
# while read line; do
# echo $line;
#done