Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

cronjob am Monatsletzten

530 views
Skip to first unread message

Albrecht Mehl

unread,
Mar 15, 2012, 6:53:02 AM3/15/12
to
Dies soll man erster cronjob werden. Als Neuling habe ich mir howto cron
angeschaut, sehe dort aber nur Festlegungen auf ein bestimmtes Datum,
z.B. 1. oder 17. oder ... eines Monats. Ich bitte um Hilfe dafür, wie
man formulieren muss, um unabhängig von der Monatslänge immer am
Monatsende auszuführen, d.h.

wenn Monatslänge = 28, dannn am 28.
29, 29.
30, 30.
31, 31.

A. Mehl
--
Albrecht Mehl |eBriefe an:mehlBEIfreundePUNKTtu-darmstadtPUNKTde
Veilchenweg 7 |Tel. (06151) 37 39 92
D-64291 Darmstadt, Germany|sehenswert - ungefähr 'Wir einsam im All'
http://www.phrenopolis.com/perspective/solarsystem/index.html






Sascha Hüdepohl

unread,
Mar 15, 2012, 7:05:48 AM3/15/12
to
Hallo!

Albrecht Mehl <AlbrechtMe...@iesy.net> schrieb:

> Ich bitte um Hilfe
> dafür, wie man formulieren muss, um unabhängig von der Monatslänge
> immer am Monatsende auszuführen, d.h.

Das kann cron alleine nicht leisten. Man hilft sich dann immer mit date.
Etwa so:

[[ $(date -d "now + 1 day" +"%d") = "01" ]] && /path/to/script.sh

Das bedeutet, wenn morgen der 1. ist, dann für das Skript aus.

HTH & HAND
Sascha

Achim Peters

unread,
Mar 15, 2012, 7:08:13 AM3/15/12
to
Am 15.03.2012 11:53, schrieb Albrecht Mehl:
> Dies soll man erster cronjob werden.

Dann vielleicht mit etwas einfacherem anfangen? ;-)

> Als Neuling habe ich mir howto cron
> angeschaut, sehe dort aber nur Festlegungen auf ein bestimmtes Datum,
> z.B. 1. oder 17. oder ... eines Monats. Ich bitte um Hilfe dafür, wie
> man formulieren muss, um unabhängig von der Monatslänge immer am
> Monatsende auszuführen,

Das ist so AFAIK nicht vorgesehen.

> d.h.
>
> wenn Monatslänge = 28, dannn am 28.
> 29, 29.
> 30, 30.
> 31, 31.

Bis auf den 29. alle 4 Jahre könntest Du drei Einträge machen und den
Monat dazunehmen:

0 0 31 1,3,5,7,8,10,12 * mytask
0 0 30 4,6,9,11 * mytask
0 0 28 2 * mytask

In Schaltjahren änderest Du die crontab vor dem 28.2. auf:

0 0 31 1,3,5,7,8,10,12 * mytask
0 0 30 4,6,9,11 * mytask
0 0 29 2 * mytask

HTH

Bye
Achim

Bernd Hohmann

unread,
Mar 15, 2012, 7:11:14 AM3/15/12
to
Am 15.03.2012 11:53, schrieb Albrecht Mehl:

> Dies soll man erster cronjob werden. Als Neuling habe ich mir howto cron
> angeschaut, sehe dort aber nur Festlegungen auf ein bestimmtes Datum,
> z.B. 1. oder 17. oder ... eines Monats. Ich bitte um Hilfe dafür, wie
> man formulieren muss, um unabhängig von der Monatslänge immer am
> Monatsende auszuführen, d.h.

Kann cron nicht. Die Standardlösung ist, das gewollte Script am
28,29,30,31sten aufzurufen und darin testet ob Monatsende ist.

Geht zb. mit "date"

"date -d tomorrow" liefert das Datum von morgen, jetzt noch den Tag des
Monats via Formatstring "+%e" herausfiltern

if [ $(date -d tomorrow +%e) == 1 ]; then
#machwas
fi

Bernd


Albrecht Mehl

unread,
Mar 16, 2012, 5:49:39 AM3/16/12
to
Vielen Dank für die rasche und kompetente Antwort. Leider habe ich in
meiner ersten Anfrage einen Punkt vergessen.
Wie müßte das modifiziert werden, wenn die Aufgabenstellung nicht
'Am Monatsletzten', sondern 'Am letzten Arbeitstag im Monat' lautete?

Dankbar

Ansgar Strickerschmidt

unread,
Mar 16, 2012, 7:01:04 AM3/16/12
to
Also schrieb Albrecht Mehl:

> Vielen Dank für die rasche und kompetente Antwort. Leider habe ich in
> meiner ersten Anfrage einen Punkt vergessen.
>
> Am 15.03.2012 12:05, schrieb Sascha Hüdepohl:
>> Hallo!
>>
>> Albrecht Mehl<AlbrechtMe...@iesy.net> schrieb:
>>
>>> Ich bitte um Hilfe
>>> dafür, wie man formulieren muss, um unabhängig von der Monatslänge
>>> immer am Monatsende auszuführen, d.h.
>>
>> Das kann cron alleine nicht leisten. Man hilft sich dann immer mit date.
>> Etwa so:
>>
>> [[ $(date -d "now + 1 day" +"%d") = "01" ]]&& /path/to/script.sh
>>
>> Das bedeutet, wenn morgen der 1. ist, dann für das Skript aus.
>
> Wie müßte das modifiziert werden, wenn die Aufgabenstellung nicht
> 'Am Monatsletzten', sondern 'Am letzten Arbeitstag im Monat' lautete?

dafür brauchst Du zumindest eine Liste der örtlichen Feiertage, die Du mit
ins Skript einbinden kannst...

Ansgar

--
*** Musik! ***

Sascha Hüdepohl

unread,
Mar 16, 2012, 1:57:33 PM3/16/12
to
Albrecht Mehl schrieb:

> Wie müßte das modifiziert werden, wenn die Aufgabenstellung nicht
> 'Am Monatsletzten', sondern 'Am letzten Arbeitstag im Monat' lautete?

Mir fällt dazu keine einfache (im Sinne eines Einzeilers) Lösung ein.

date kennt nocht %w um zu bestimmen um welchen Wochentag es sich
handelt. Damit könnte man schonmal das Wochenende ausfiltern.

Für das Problem der Feiertage könnte calendar (bei Debian im Paket
bsdmainutils) nützlich sein.

$ calendar -f /usr/share/calendar/de_DE/calendar.feiertag -t 20120501
Mai 01 Maifeiertag

Man mmüßte also erst bestimmen ob man sich in der letzten Woche des
Monats befindet. Etwa:

if [[ $(date -d "next week" +%e) -lt 7 ]]
then
fi

Dann vom Letzen des Montas rückwärts den Tag finden der nicht auf ein
Wochenende fällt und kein Feiertag ist.

Oder so ähnlich.

Das zu skripten wird eine schöne Übungsaufgabe. Mir ist das grade zu
viel.

Gruß
Sascha

Juergen Ilse

unread,
Mar 17, 2012, 6:52:18 AM3/17/12
to
Hallo,

Albrecht Mehl <AlbrechtMe...@iesy.net> wrote:
> Dies soll man erster cronjob werden. Als Neuling habe ich mir howto cron
> angeschaut, sehe dort aber nur Festlegungen auf ein bestimmtes Datum,
> z.B. 1. oder 17. oder ... eines Monats. Ich bitte um Hilfe dafür, wie
> man formulieren muss, um unabhängig von der Monatslänge immer am
> Monatsende auszuführen, d.h.
>
> wenn Monatslänge = 28, dannn am 28.
> 29, 29.
> 30, 30.
> 31, 31.

Schreib alle 4 Tage in den crontab-Eintrag hinein und lass im script
pruefen, ob es der "letzte des Monats" ist (wenn ja, fuehre das script
normal aus, ansonsten steige aus dem script sofort mit "exit" aus).

Tschuess,
Juergen Ilse (jue...@usenet-verwaltung.de)
--
Ein Domainname ist nur ein Name, nicht mehr und nicht weniger.
Wer mehr hineininterpretiert, hat das Domain-Name-System nicht
verstanden.

Holger Marzen

unread,
Mar 17, 2012, 2:51:37 PM3/17/12
to
* On Thu, 15 Mar 2012 11:53:02 +0100, Albrecht Mehl wrote:

> Dies soll man erster cronjob werden. Als Neuling habe ich mir howto cron
> angeschaut, sehe dort aber nur Festlegungen auf ein bestimmtes Datum,
> z.B. 1. oder 17. oder ... eines Monats. Ich bitte um Hilfe dafür, wie
> man formulieren muss, um unabhängig von der Monatslänge immer am
> Monatsende auszuführen, d.h.
>
> wenn Monatslänge = 28, dannn am 28.
> 29, 29.
> 30, 30.
> 31, 31.
>

Immer am Ersten des Monats ausführen und als ersten Befehl
sleep -86400
schreiben.

SCNR

Ansonsten siehe
http://www.unix.com/shell-programming-scripting/19318-crontab-entry-run-every-last-day-month.html
Message has been deleted

Norbert Möndjen

unread,
Mar 18, 2012, 4:38:47 AM3/18/12
to
Andreas Kohlbach wrote:

> Holger Marzen wrote on 17. March 2012:
>>
>> * On Thu, 15 Mar 2012 11:53:02 +0100, Albrecht Mehl wrote:
>>
>>> Dies soll man erster cronjob werden. Als Neuling habe ich mir howto cron
>>> angeschaut, sehe dort aber nur Festlegungen auf ein bestimmtes Datum,
>>> z.B. 1. oder 17. oder ... eines Monats. Ich bitte um Hilfe dafür, wie
>>> man formulieren muss, um unabhängig von der Monatslänge immer am
>>> Monatsende auszuführen, d.h.
>>>
>>> wenn Monatslänge = 28, dannn am 28.
>>> 29, 29.
>>> 30, 30.
>>> 31, 31.
>>>
>>
>> Immer am Ersten des Monats ausführen und als ersten Befehl
>> sleep -86400
>> schreiben.
>>

Das Script jeden Tag ausführen und testen ob date +1day einen neuen Monat
bringt.

Ciao Nobbe

Helmut Hullen

unread,
Mar 18, 2012, 5:13:00 AM3/18/12
to
Hallo, Norbert,

Du meintest am 18.03.12:

>>>> Dies soll man erster cronjob werden. Als Neuling habe ich mir
>>>> howto cron angeschaut, sehe dort aber nur Festlegungen auf ein
>>>> bestimmtes Datum, z.B. 1. oder 17. oder ... eines Monats. Ich
>>>> bitte um Hilfe dafür, wie man formulieren muss, um unabhängig von
>>>> der Monatslänge immer am Monatsende auszuführen, d.h.

[...]

> Das Script jeden Tag ausführen und testen ob date +1day einen neuen
> Monat bringt.

Albrecht hat ja seinen Wunsch inzwischen auf "letzter Werktag im Monat"
erweitert - das halte ich für fast unlösbar.
Definition "Werktag", lokale Feiertage, ...

"Im Prinzip" mag es da etwas im "*.ical/*.ics"-Umfeld geben.

Viele Gruesse
Helmut

"Ubuntu" - an African word, meaning "Slackware is too hard for me".

Peter Blancke

unread,
Mar 18, 2012, 6:05:25 AM3/18/12
to
Am 2012-03-18, Norbert Möndjen <n.moe...@vodafone.de> schrieb:

> Das Script jeden Tag ausführen

Richtig: Das Skript nur am 28., 09., 30. und 31. ausfuehren.

> und testen ob date +1day einen neuen Monat bringt.

Loest aber noch nicht das Werktag-Problem.

Grusz,

Peter Blancke

--
Hoc est enim verbum meum!

Bernd Hohmann

unread,
Mar 18, 2012, 6:58:34 AM3/18/12
to
Am 18.03.2012 10:13, schrieb Helmut Hullen:

> Albrecht hat ja seinen Wunsch inzwischen auf "letzter Werktag im Monat"
> erweitert - das halte ich für fast unlösbar.
> Definition "Werktag", lokale Feiertage, ...

Ich hab das mal für die Lohnabrechnung eines Reinigungsdienstleisters
programmiert.

Eigentlich einfach, aber mit recht ulkigen Seiteneffekten: Ein
Mitarbeiter, der in der Niederlassung Ingolstdt beschäftigt ist und in
Augsburg putzt, für den war das Augsburger "Hohe Friedensfest" ein
Feiertag und umgekehrt.

Zu beachten sind die "pseudo-feiertage" wie Sylester und Heiligabend wo
teilweise nur Halbtags gearbeitet wird.

> "Im Prinzip" mag es da etwas im "*.ical/*.ics"-Umfeld geben.

gcal --holiday-list=short --cc-holidays=DE_NI spuckt schonmal die
gesetzlichen Feiertage für Niedersachsen aus (mit =long kommen auch die
"besonderen" Tage wie Muttertag und Sylvester an).

Man kann gcal jetzt mit "gcal %20120406 --cc-holidays=DE_NI" einen
Kalender vom April mit gekennzeichneten Feiertagen ausspucken lassen,
eine Abfrage ob und welcher Feiertag auf dem übergebenen Datum liegt hab
ich nicht gefunden.

Was zur Not gehen könnte:

gcal %20120406 --holiday-list=long --cc-holidays=DE_NI

wirft in der letzten Spalte die Anzahl Tage (+/-) zum übergebenen
Referenzdatum (hier 06.04.2012) aus. Wenn da nichts steht, ist dieser
Tag ein Feiertag.

Bernd

Helmut Hullen

unread,
Mar 18, 2012, 7:23:00 AM3/18/12
to
Hallo, Bernd,

Du meintest am 18.03.12:

>> Albrecht hat ja seinen Wunsch inzwischen auf "letzter Werktag im
>> Monat" erweitert - das halte ich für fast unlösbar.
>> Definition "Werktag", lokale Feiertage, ...

[...]

> Eigentlich einfach, aber mit recht ulkigen Seiteneffekten: Ein
> Mitarbeiter, der in der Niederlassung Ingolstdt beschäftigt ist und
> in Augsburg putzt, für den war das Augsburger "Hohe Friedensfest" ein
> Feiertag und umgekehrt.

> Zu beachten sind die "pseudo-feiertage" wie Sylester und Heiligabend
> wo teilweise nur Halbtags gearbeitet wird.

Eben: für wen ist die Eigenschaft "Werktag" wichtig, wie hat diese
Zielperson sie definiert?

Ist das ein Problem für einen lokalen Verein oder für einen mit
internatiolem Einzugsbereich? Albrecht (der Erstfrager) wohnt in
Darnstadt, aber dadurch wird sein Werktag-Problem nicht zu einem lokalen
Problem.

>> "Im Prinzip" mag es da etwas im "*.ical/*.ics"-Umfeld geben.

> gcal --holiday-list=short --cc-holidays=DE_NI spuckt schonmal die
> gesetzlichen Feiertage für Niedersachsen aus (mit =long kommen auch
> die "besonderen" Tage wie Muttertag und Sylvester an).

> Man kann gcal jetzt mit "gcal %20120406 --cc-holidays=DE_NI" einen
> Kalender vom April mit gekennzeichneten Feiertagen ausspucken lassen,
> eine Abfrage ob und welcher Feiertag auf dem übergebenen Datum liegt
> hab ich nicht gefunden.

> Was zur Not gehen könnte:

> gcal %20120406 --holiday-list=long --cc-holidays=DE_NI

> wirft in der letzten Spalte die Anzahl Tage (+/-) zum übergebenen
> Referenzdatum (hier 06.04.2012) aus. Wenn da nichts steht, ist dieser
> Tag ein Feiertag.

Ja - damit habe ich vor wenigen Wochen auch mal ein wenig herumgespielt.
Auslöser: die vielen schuleigenen Clients sollen am Wochenende (sa/so)
sowie an Feiertagen und in den Ferien nicht per "wake on LAN" gestartet
werden.

Führt aber zu einer komplett anderen Lösung als "letzter Freitag im
Monat, der ein Werktag ist".

Heinz Müller

unread,
Mar 18, 2012, 9:51:49 AM3/18/12
to
Am 16.03.2012 10:49, schrieb Albrecht Mehl:
> Vielen Dank für die rasche und kompetente Antwort. Leider habe ich in
> meiner ersten Anfrage einen Punkt vergessen.
>
> Am 15.03.2012 12:05, schrieb Sascha Hüdepohl:
>> Hallo!
>>
>> Albrecht Mehl<AlbrechtMe...@iesy.net> schrieb:
>>
>>> Ich bitte um Hilfe
>>> dafür, wie man formulieren muss, um unabhängig von der Monatslänge
>>> immer am Monatsende auszuführen, d.h.
>>
>> Das kann cron alleine nicht leisten. Man hilft sich dann immer mit date.
>> Etwa so:
>>
>> [[ $(date -d "now + 1 day" +"%d") = "01" ]]&& /path/to/script.sh
>>
>> Das bedeutet, wenn morgen der 1. ist, dann für das Skript aus.
>
> Wie müßte das modifiziert werden, wenn die Aufgabenstellung nicht
> 'Am Monatsletzten', sondern 'Am letzten Arbeitstag im Monat' lautete?
>
> Dankbar
>
> A. Mehl

Wie wäre es mit einer Liste in welcher der jeweils letzte Arbeitstag
pro Monat enthalten ist? Klar, diese muss abgestimmt und manuell
gepflegt werden.

In dieser Liste steht halt dann das Datum ( in einem beliebigem
wählbaren Format ) und in deinem Script prüfst Du ob das tagesaktuelle
Datum in der Liste enthalten ist. Den cronjob lässt du dann jeden Tag
laufen.

Ist halt mehr ein Workaround aber eventuell am praktikabelsten.

/Heinz


Thomas Noll

unread,
Mar 18, 2012, 10:14:48 AM3/18/12
to
Am praktikabelsten ist das explizite Eintragen der gewünschten Tage in der
crontab. Bis zu 12 Einträge für ein Jahr, und noch ein dreizehnter für die
Erinnerungsmail, daß wieder neue Einträge erstellt werden müssen.


--
Woo Hoo Woo Hoo Hoo

Uwe Borchert

unread,
Mar 18, 2012, 10:30:57 AM3/18/12
to
Hallo,

Am 18.03.2012 14:51, schrieb Heinz Müller:

...[...]...

> Wie wäre es mit einer Liste in welcher der jeweils letzte Arbeitstag
> pro Monat enthalten ist? Klar, diese muss abgestimmt und manuell
> gepflegt werden.

Nö. So eine Liste kann man sicher auch automatisiert erstellen. Ok,
bei Feiertagen wird es etwas schwieriger, aber normale Werktage sind
da leicht zu erstellen. Du erstellst eine Liste für jeden Monat ganz
aktuell mit dem Eintrag Werktag oder nicht und schaust dann auf den
letzten Eintrag. Werktag? Dann rausschreiben! Kein Werktag? Einen
Tage zurück und wieder schauen ...

> In dieser Liste steht halt dann das Datum ( in einem beliebigem
> wählbaren Format ) und in deinem Script prüfst Du ob das tagesaktuelle
> Datum in der Liste enthalten ist. Den cronjob lässt du dann jeden Tag
> laufen.

Das würde ich etwas höher ansetzen. In die Liste kommt für jeden
Monat der erste und letzte Werktag und u. U. alle Feiertage. Das
sind dann lokale Listen und zur Erstellung dieser Listen gibt es
dann Rohlisten mit den festen Feiertagen und ein Programm das nach
dem Mondkalender die beweglichen Feiertage (Ostern, Pfingsten ...
uvm) ausrechnet und in eine weitere Liste wirft.

> Ist halt mehr ein Workaround aber eventuell am praktikabelsten.

Nö! Richtig aufgesetzt wäre das eine sehr gute Lösung und weit mehr
als nur ein einfacher Wörkaround. Das ganze wäre dann eine Basis
für Terminplaner, Kalendertemplates und alles Mögliche. Bei einer
geeigneten Wahl der Eingabedateien müsste man die dann nicht mal
selber rechnen (lassen) und könnte modifizierte Listen verteilen.
Da könnten dann auch Schließungstage von Werken mit rein ... Aber
das ganze wäre weit weg von einer einfachen Shell-Programmierung.
Mondphasen in C gibt es ja schon, ebenso gnucal.

MfG

Uwe Borchert

Heinz Müller

unread,
Mar 18, 2012, 10:32:53 AM3/18/12
to
Die Erinnerungsmail könnte man auch direkt aus dem Script heraus
erzeugen, z.B. mit einer Prüfung auf den 28.12. ( oder so ähnlich ).
Ob nun mit einer Liste oder 12 Einträge in der crontab: Gepflegt werden
muss leider beides.


Message has been deleted

Bernd Hohmann

unread,
Mar 18, 2012, 7:12:37 PM3/18/12
to
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

Message has been deleted

Andreas Kohlbach

unread,
Mar 18, 2012, 9:04:04 PM3/18/12
to
Peter Blancke wrote on 18. March 2012:
>
> Am 2012-03-18, Norbert Möndjen <n.moe...@vodafone.de> schrieb:
>
>> Das Script jeden Tag ausführen
>
> Richtig: Das Skript nur am 28., 09., 30. und 31. ausfuehren.
>
>> und testen ob date +1day einen neuen Monat bringt.
>
> Loest aber noch nicht das Werktag-Problem.

Dann darauf testen, dass "date +%w" nicht 6 oder 0 ist.
--
Andreas
Linux: The choice of a GNU generation.

Holger Marzen

unread,
Mar 19, 2012, 2:11:29 AM3/19/12
to
* On Sun, 18 Mar 2012 21:04:04 -0400, Andreas Kohlbach wrote:

> Peter Blancke wrote on 18. March 2012:
>>
>> Am 2012-03-18, Norbert Möndjen <n.moe...@vodafone.de> schrieb:
>>
>>> Das Script jeden Tag ausführen
>>
>> Richtig: Das Skript nur am 28., 09., 30. und 31. ausfuehren.
>>
>>> und testen ob date +1day einen neuen Monat bringt.
>>
>> Loest aber noch nicht das Werktag-Problem.
>
> Dann darauf testen, dass "date +%w" nicht 6 oder 0 ist.

Dann muss man den Cronjob auch noch ein paar Tage länger täglich
aufrufen UND sich in einer Statusdatei merken, ob er Cronjob für den
vergangenen Monat schon einmal gelaufen ist.

So langsam wird's enterprisey. Am besten auch gleich über den Einbau
eines Lizenzierungsschlüssels nachdenken und eine Home-, Professional-
und Ultimate-Variante entwickeln. Letztlich ist das natürlich von der
Codebasis die Ultimateversion, die man zu den einfacherern Versionen
zunehmend verkrüppelt. Die Home-Variante z.B. läuft nur außerhalb
üblicher Bürozeiten, die Professional-Variante nur innerhalb dieser
Zeiten. Die mächtoge Ultimate-Variante gibt dem Benutzer die volle
Power.

Cloud-Version und App andenken!

Holger Marzen

unread,
Mar 19, 2012, 2:15:50 AM3/19/12
to
* On Sun, 18 Mar 2012 21:04:04 -0400, Andreas Kohlbach wrote:

> Peter Blancke wrote on 18. March 2012:
>>
>> Am 2012-03-18, Norbert Möndjen <n.moe...@vodafone.de> schrieb:
>>
>>> Das Script jeden Tag ausführen
>>
>> Richtig: Das Skript nur am 28., 09., 30. und 31. ausfuehren.
>>
>>> und testen ob date +1day einen neuen Monat bringt.
>>
>> Loest aber noch nicht das Werktag-Problem.
>
> Dann darauf testen, dass "date +%w" nicht 6 oder 0 ist.

Dann muss man den Cronjob auch noch ein paar Tage länger täglich
aufrufen UND sich in einer Statusdatei merken, ob der Cronjob für den

Holger Marzen

unread,
Mar 19, 2012, 2:16:53 AM3/19/12
to
* On Sun, 18 Mar 2012 21:04:04 -0400, Andreas Kohlbach wrote:

> Peter Blancke wrote on 18. March 2012:
>>
>> Am 2012-03-18, Norbert Möndjen <n.moe...@vodafone.de> schrieb:
>>
>>> Das Script jeden Tag ausführen
>>
>> Richtig: Das Skript nur am 28., 09., 30. und 31. ausfuehren.
>>
>>> und testen ob date +1day einen neuen Monat bringt.
>>
>> Loest aber noch nicht das Werktag-Problem.
>
> Dann darauf testen, dass "date +%w" nicht 6 oder 0 ist.

Dann muss man den Cronjob auch noch ein paar Tage länger täglich
aufrufen UND sich in einer Statusdatei merken, ob er Cronjob für den
vergangenen Monat schon einmal gelaufen ist.

So langsam wird's enterprisey. Am besten auch gleich über den Einbau
eines Lizenzierungsschlüssels nachdenken und eine Home-, Professional-
und Ultimate-Variante entwickeln. Letztlich ist das natürlich von der
Codebasis die Ultimateversion, die man zu den einfacheren Versionen
zunehmend verkrüppelt. Die Home-Variante z.B. läuft nur außerhalb
üblicher Bürozeiten, die Professional-Variante nur innerhalb dieser
Zeiten. Die mächtoge Ultimate-Variante gibt dem Benutzer die volle
Power.

Cloud-Version und App andenken! Ab Professional-Variante eine möglichst
kommerzielle Datenbank voraussetzen, um den Status zu speichern!

Helmut Hullen

unread,
Mar 19, 2012, 2:56:00 AM3/19/12
to
Hallo, Albrecht,

Du meintest am 16.03.12:

[...]

> Wie m��te das modifiziert werden, wenn die Aufgabenstellung nicht
> 'Am Monatsletzten', sondern 'Am letzten Arbeitstag im Monat' lautete?

Nur wegen der Nebenbedingungen:

meinst Du Werktag oder Arbeitstag?

http://de.wikipedia.org/wiki/Werktag

Wenn der Job mit "Fristenwahrung" zusammenh�ngt: was meint der Partner
f�r diesen Job? Wenn Fristen zu wahren sind, dann d�rfte eher "Werktag"
gemeint sein (aber da w�rde ich nachfragen, nicht nur vermuten).

Gibt es lokale Besonderheiten, die zu ber�cksichtigen w�ren?

Nur um die Verwirrung ein wenig zu erh�hen: f�r Pastoren ist der Sonntag
sicherlich (auch) Arbeitstag, f�r Bahnpersonal oder Personal auf einer
Intensivstation hoffentlich auch.

Helmut Hullen

unread,
Mar 19, 2012, 2:50:00 AM3/19/12
to
Hallo, Bernd,

Du meintest am 19.03.12:

> 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.

Details siehe

http://de.wikipedia.org/wiki/Werktag

Rud1ger Sch1erz

unread,
Mar 19, 2012, 3:59:46 AM3/19/12
to
Hel...@Hullen.de (Helmut Hullen) writes:

> Albrecht hat ja seinen Wunsch inzwischen auf "letzter Werktag im Monat"
> erweitert - das halte ich für fast unlösbar.
> Definition "Werktag", lokale Feiertage, ...

AOL

Vermutlich ist es am einfachsten und schnellsten, für jeden gewünschten
letzten Werktag im Monat einen eigenen Crontab Eintrag zu machen. Sind
ja nur 12 pro Jahr.

Ich weiß, ist natürlich eine voll uncoole Lösung...

--
Tschau
Rüdiger

Achtung, dieser Artikel ist mit sublimalen Werbeeinblendungen hinterlegt.

Norbert Möndjen

unread,
Mar 19, 2012, 4:36:27 AM3/19/12
to
Peter Blancke wrote:

> Am 2012-03-18, Norbert Möndjen <n.moe...@vodafone.de> schrieb:
>
>> Das Script jeden Tag ausführen
>
> Richtig: Das Skript nur am 28., 09., 30. und 31. ausfuehren.
>
>> und testen ob date +1day einen neuen Monat bringt.
>
> Loest aber noch nicht das Werktag-Problem.

Naja dafür habe ich ein Feiertagsscript, das mir die deutschen Feiertage
liefert und dann muß man halt noch checken ob 7 - Tageszahl + date ein neuer
Monat ist. Darauf achten ob Sonntag oder Monntag der Erste Tag der Woche
ist. Feiertagslisten muß man allerdings immer personaliesieren, da sie je
nach Wohnort bzw. Arbeitsort verschieden sind.

Ciao Nobbe

Message has been deleted
Message has been deleted
0 new messages