PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Cronjob jeden zweiten Montag ausführen



ChengFU
16.09.03, 17:00
Hallo zusammen,

Wie kann ich Cron dazu bringen, einen Job jeden zweiten Montag auszuführen? In der Manpage habe ich dazu leider nicht gefunden.

Gruss, CF

Dooku
16.09.03, 22:41
Das wirst du mit cron alleine nicht hinbekommen. Alles was du machen kannst ist, den Job von Cron jeden Montag aufzurufen, und dann im Job selbst pruefen, ob es der 2. Montag ist.

Roger Wilco
17.09.03, 01:21
@Dooku: Nö. Geht schon mit Cron allein.

@ChengFU: Folgendes in deine crontab:

0 12 */2 * * root <script>
Das führt dein <script> alle 2 Tage um 12 Uhr aus.

EDIT: Ok, sorry... Wer lesen kann ist klar im Vorteil *grübel* War wohl ein Schnellschuß zu später Stunde :ugly:

klemens
17.09.03, 02:14
Original geschrieben von Roger Wilco
@Dooku: Nö. Geht schon mit Cron allein.

@ChengFU: Folgendes in deine crontab:

0 12 */2 * * root <script>
Das führt dein <script> alle 2 Tage um 12 Uhr aus.

??? -- soviel ich weiss hören die Möglichkeit von cron mit dem 8. Tag auf! -- er/sie will ja nicht alle 2 Tage, sonder montags 14-tägig den Job ausführen ... Dooku wird da schon recht haben .. das Script so bauen, dass es nur alle 2x ausgeführt wird!

ChengFU
17.09.03, 07:42
Hmm, ich ahnte das es so kommen würde :-)

Alle zwei Tage etc. war mir schon klar, aber die Docs sagen halt nix darüber, ob das auch bei den Wochentagen funtkioniert und ich habe keine zwei Wochen Zeit zum testen.

Nun gut, dann werden ich mal losgehen und einen kleine Wochentage-Zähl-Funktion in das Skript basteln *seufz*

Gruss, CF

downtown
17.09.03, 18:41
so?

0 4 * * 1/2 root <programm>

sollte doch gehen?

http://www.selflinux.org/selflinux/html/cron01.html#d33e75 hier findest du evtl. noch was ;)

zwerg
17.09.03, 22:43
Ich kenne mich mit "cron" nicht aus, also keine Ahnung ob die genannte Lösung funktioniert, deswegen hier ein Vorschlag zum "Wochentag zählen":
echo 0 > zaehler dein Script, dass von cron aufruft überprüft dann ob die Zahl in der Datei "zaehler" gerade ist. Falls ja, dann führt er deinen eigentlichen Befehl aus, falls nein eben nicht. In jedem Fall muss der Zähler um 1 erhöht werden:
echo $[$(cat zaehler)+1] > zaehler] Ich hoffe das war verständlich ;) jetzt erhöht sich der Zähler natürlich bis ins unendliche aber man kann ja einbauen, dass er bei 10 wieder auf 0 zurücksetzt, oder einfach immer nur abwechselnd addiert (wenn die Zahl 0 ist) und subtrahiert (wenn die Zahl 1 ist), oder oder oder... ;)

HTH, zwerg

Jasper
18.09.03, 08:30
Original geschrieben von downtown

0 4 * * 1/2 root <programm>

sollte doch gehen?


geraten oder getestet?

-j

Debian-EXS
21.01.08, 16:25
Ist zwar schon ein Weilchen her, aber falls mal wieder jemand das Problem hat:


* * 1-7,15-21 * * if test `date | awk '{print $1}'` == "Mo" ; then <tu was
du möchtest> ; fi

Sollte funktionieren. Für die "anderen" 2 Wochen eines Monats dann eben 8-14,22-28 statt 1-7,15-21 angeben ;-)

mpy
05.03.10, 09:38
Wie wäre es damit:


if [ $(( 10#$(date +%V) % 2 )) -ne 1 ]; then echo Los gehts!; fi

Das ganze muss vrmtl. noch in ein Skript verpackt werden, weil der crond es einfach so in der crontab nicht versteht.

HBtux
05.03.10, 19:15
* * 1-7,15-21 * * if test `date | awk '{print $1}'` == "Mo" ; then <tu was
du möchtest> ; fi


Warum nicht gleich so?
(ungetestet / geraten)


30 22 1-7,15-21 * 1 tuwas



Das wäre auch mal einen Versuch wert.
Könnte gehen.


30 22 * * 1/2 tuwas

Das einzige Problem das ich hierbei sehe ist....
In diesem Fall bedeutet "jeden zweiten Montag" ab dem Tag an gerechnet, wenn der Cron neu gestartet wird. (glaube ich zumindest)
D.h.
- wenn der Cron noch vor dem 1. oder 3. Montag gestartet wurde, wird das Script am 1. und 3. Montag ausgeführt.
- wenn das Script vor dem 2. oder 4. Freitag gestartet wurde, wird das Script am 2. und 4. Freitag ausgeführt.
Es kann also Verschiebungen geben...

Problematisch könnte auch die Monate werden, in denen es 5 Montage gibt....!?
(kommt im März, Mai, August und November 2010 vor)
Was soll am 5. Montag des Monats passieren?