Anzeige:
Ergebnis 1 bis 9 von 9

Thema: befehl nur am montag nach dem letzten freitag im monat ausführen?!

  1. #1
    Registrierter Benutzer
    Registriert seit
    09.01.2001
    Beiträge
    242

    Question befehl nur am montag nach dem letzten freitag im monat ausführen?!

    hi,

    hat jemand eine idee, wie ich ein script nur montags nach dem letzten freitag im
    monat ausführen kann.
    problem ist, das das nicht immer der erste montag im neuen monat ist.

    theoretisch könnte ich ja jeden montag ein script laufen lassen, was kuckt, ob
    vor 3 tagen der letzte freitag im monat war - aber wie stell ich das am besten an?

    thx
    der tom

  2. #2
    Registrierter Benutzer Avatar von Molaf
    Registriert seit
    15.11.2004
    Beiträge
    127
    Starten jeden Montag lässt sich durch einen Eintrag in der CRONTAB erreichen.

  3. #3
    Registrierter Benutzer
    Registriert seit
    17.07.2003
    Beiträge
    87
    Den letzten Freitag im Monat brauche ich auch für meine Datensicherung, dafür benutze ich diesen tollen cal-awk Schnippsel. Die 3 Tage später findest du über ein date -d $REFERENZDATUM +x Tage heraus.:
    Code:
    #!/bin/sh
    FREITAG=$(/usr/bin/cal | /usr/bin/awk 'NF >= 6 {print $6}' | tail -1)
    JAHRMONAT=$(date +%Y-%m)
    MONTAG=$(date -d "${JAHRMONAT}-${FREITAG} +3 days" -I)
    echo $MONTAG
    Jetzt würde ich an deiner Stelle das Script am 15. jeden Monat laufen lassen und das Montags Datum in eine Datei schreiben und dann jeweils täglich darauf vergleichen.
    Geändert von ThorstenS (01-11-2005 um 07:53 Uhr)

  4. #4
    Registrierter Benutzer
    Registriert seit
    09.01.2001
    Beiträge
    242
    @Molaf
    ja, sorry - da hab ich mich etwas unglücklich ausgedrückt, wie das mit
    jedem montag im cron geht weis ich. problem war das ermitteln des tages.


    @ThorstenS
    thx für die tips - werds mal testen.


    der tom

  5. #5
    Registrierter Benutzer Avatar von Molaf
    Registriert seit
    15.11.2004
    Beiträge
    127
    Also mit dem Aufruf von crontab kann man neue Cronjobs hinzufügen, zumindest wenn man crond laufen hat. Ansonsten in /etc/crontab eintragen:

    * * * * 1 user /bin/scriptname --backup

    Die Sternchen sind der Reihe nach : Minuten, Stunden, Monatstag, Monat, Wochentag.
    Dann noch Ausführender des Programms und der Programmaufruf selber.

    * steht dabei für Platzhalter, eine Zahl bei Minuten beispielsweise würde bedeuten dass immer zu der Minuten zahl jeder Stunde ausgeführt wird, wenn bei Stunden * ist, usw..

    Ich schreib das mal nur dazu, weil es bei man crontab nicht so dabeisteht, zumindest nicht bei mir (mag bei anderen Versionen so sein).

    Ob der vorherige Freitag allerdings der letzte im Monat war muss weiterhin getestet werden.

  6. #6
    Registrierter Benutzer
    Registriert seit
    27.12.2002
    Ort
    Matrix
    Beiträge
    194
    den letzten freitag könnte man so rausfinden:

    jeden freitag das ausführen lassen:

    if [ $(date -d 'next friday' +%d) -lt $(date -d 'now' +%d) ]; then echo "last friday"; fi


    wenn der nächste freitag einen kleineren wert für den tag als der aktuelle freitag hat, ist der aktuelle freitag der letzte des monats.


    -j

  7. #7
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von meinereinerseiner
    theoretisch könnte ich ja jeden montag ein script laufen lassen, was kuckt, ob
    vor 3 tagen der letzte freitag im monat war - aber wie stell ich das am besten an?
    Nun, wenn der Montag der 1. - 3. eines Monats ist, ist es der Montag nach dem letztes Freitag.
    Ansonsten ist es der Montag am letzten bis vorvorvorletzten Tag des jeweiligen Monats.

    Du müsstest also wohl dir eine Tabelle mit den Tagesanzahl der einzelnen Monate machen und dann z.B. im Januar auf 31. 30. 29. und 28. testen.

    Bei Februar müsstest du dann natürlich auf Schaltjahr testen:

    JAHR % 4 == 0 && (JAHR % 100 != 0 || JAHR % 400 == 0)

  8. #8
    Registrierter Benutzer Avatar von Molaf
    Registriert seit
    15.11.2004
    Beiträge
    127
    @meinereinerseiner: Sorry, beim meinem letzten Post muss ich wohl total verwirrt gewesen sein, die tun mir hier bestimmt Medikamente in den Kaffee...


    Das hier tut es in perl, in Shell-Sachen bin ich nicht so gut. Aber perl sollte eigentlich überall vorhanden sein.
    Dabei nutze ich die Linearität der Unix-Systemzeit aus, und überlasse die kniffeligen Sachen wie Datumsumrechnung einfach der perl-Funktion.

    Code:
    #/usr/bin/perl
    
    $jetzt=time;
    @temp=localtime($jetzt);
    
    #Kontrolle, ob wirklich Montag ist
    if ($temp[6] eq 'Mon') {
    
    #Tagesbeginn errechnen
    $jetzt=int($jetzt/(3600*24))*3600*24;
    
    #Letzter Freitag war
    $jetzt-=(3*3600*24);
    
    #Datum von letztem Freitag und dem nächsten Freitag
    @temp=localtime($jetzt);
    @temp2=localtime($jetzt+7*24*3600);
    
    if ($temp[4] != $temp2[4])	#Nächster Freitag ist ein anderer Monat
    	{qx('/usr/bin/programm');}
    }

  9. #9
    Registrierter Benutzer
    Registriert seit
    29.12.2001
    Ort
    Berlin
    Beiträge
    231
    Wenn schon Perl, dann so
    Code:
    #!/usr/bin/perl -w
    use Date::Calc qw(Today Nth_Weekday_of_Month_Year Add_Delta_YMD);
    #
    my ($year,$month,$day)=Today();
    ($year,$month,$day)=Add_Delta_YMD($year,$month,$day,0,1,0);
    ($y,$m,$d)=Nth_Weekday_of_Month_Year($year,$month,1,1);
    $nm=$y.$d.$m."000000";
    print $nm."\n";
    exit;
    Das ganze Script dann vielleicht immer ganz einfach at uebergeben. Das ueber at zu startende Script starten dann immer das naechste Script und diese dann das naechste usw.

    tomes
    ************************************************
    Man(n oder Frau) muss nicht alles wissen,
    Man(n oder Frau) muss nur wissen wo es steht !
    ************************************************
    http://www.sandtom.net
    ICQ 176436259

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •