# Zeitsteuerung

<!-- last_modified: 09. Jul 2019 -->
Mit der Zeitsteuerung kann man bestimmte Abläufe zeitlich steuern. Bisher wurde ein einfacher Timer benutzt, mit dem Start- und Endzeit und die Intervalle einstellen konnte. Ab Version 2.6.1. ist ein neuer Timer eingebunden, mit dem dann auch solche Zeiten wie z.B. "jeden Freitag um neun Uhr" oder "jeden Wochentag um 9.30 Uhr" oder sogar "alle 5 Minuten zwischen 9.00 und 10.00 Uhr an jedem Montag, Mittwoch und Freitag im Januar" möglich sind.

## ab Version 2.6.1 - Cron Trigger

Cron Trigger sind oft besser geeignet als SimpleTrigger, wenn man zu wiederkehrenden Zeiten Jobs starten will, im Gegensatz zu exakt angegebenen Zeitintervallen beim Simple Trigger. Mit dem Cron Trigger kann man Startzeiten festlegen wie z.B. "jeden Freitag um neun Uhr" oder "jeden Wochentag um 9.30 Uhr" oder sogar "alle 5 Minuten zwischen 9.00 und 10.00 Uhr an jedem Montag, Mittwoch und Freitag im Januar". Der Cron Trigger hat aber auch analog dem Simple Trigger eine Startzeit und Endzeit, die den Einsatz des Triggers steuert.

### Mode

| Modus | Bedeutung |
|-------|-----------|
| Ausführlich | Zeiträume werden über bestimmte Felder ausgewählt |
| Expert | Zeiträume werden mit Cron-Expressions im Feld "Cron-Trigger" angegeben |

### Stunde

*Innerhalb welcher Stunde(n)?*

**Auswahl:**

| Option | Bedeutung |
|--------|-----------|
| jede | innerhalb jeder Stunde |
| Zahl auswählen | innerhalb der ausgewählten Stunde, z.B. 0 → von 0:00 bis 0:59 |
| zyklisch | alle 2, 4, … Stunden starten (für je eine Stunde) |
| Eingabe | spezielle Angaben mit Cron-Expressions |

**Werte (Cron-Expression):**

| Zeichen | Bedeutung |
|---------|-----------|
| `*` | wie Auswahl "jede" |
| `0` … `23` | wie "Zahl auswählen" |
| `,` | mehrere Stunden, z.B. `3,7,10`: Stunde 3, 7 und 10 |
| `-` | Zeitraum, z.B. `10-20`: ab Stunde 10 bis einschließlich 20 |
| `/` | Inkremente, z.B. `0/2`: Start Stunde 0, alle 2 Stunden; `3/3`: Start Stunde 3, alle 3 Stunden |

### Minute

*Zu welcher Minute innerhalb der Stunden bzw. alle wie viele Minuten innerhalb der Stunden?*

**Auswahl:**

| Option | Bedeutung |
|--------|-----------|
| jede | startet jede Minute innerhalb der Stunde |
| Zahl auswählen | z.B. Start zur Minute 15 innerhalb der Stunde |
| zyklisch | alle 2, 5, … Minuten starten |
| Eingabe | spezielle Angaben mit Cron-Expressions |

**Werte (Cron-Expression):**

| Zeichen | Bedeutung |
|---------|-----------|
| `*` | wie Auswahl "jede" |
| `0` … `59` | wie "Zahl auswählen" |
| `/` | Inkremente, z.B. `0/10`: Start Minute 0, alle 10 Minuten; `30/2`: Start Minute 30, alle 2 Minuten |
| `,` | mehrere Werte, z.B. `2,20,45`: Minute 2, 20 und 45 |
| `-` | Zeitraum, z.B. `10-20`: ab Minute 10 bis Minute 20, jede Minute |

### Tag

*Innerhalb welchen Tages im Monat?*

**Auswahl:**

| Option | Bedeutung |
|--------|-----------|
| jeden | innerhalb jeden Tages im Monat |
| Zahl auswählen | innerhalb des ausgewählten Tages im Monat |
| Eingabe | spezielle Angaben mit Cron-Expressions |

**Werte (Cron-Expression):**

| <div style="width:60px">Zeichen</div> | Bedeutung |
|---------|-----------|
| `*` | wie Auswahl "jeden" |
| `1` … `31` | wie "Zahl auswählen" |
| `,` | mehrere Tage, z.B. `13,14,19`: 13., 14. und 19. Tag im Monat |
| `-` | Zeitraum, z.B. `5-10`: 5. bis einschließlich 10. Tag im Monat |
| `/` | Inkremente, z.B. `1/4`: Start Tag 1, alle 4 Tage; `3/3`: Start Tag 3, alle 3 Tage |
| `L` | letzter Tag im Monat (egal ob 28., 30. oder 31.), z.B. `L-2`: vorvorletzter Tag im Monat |
| `W` | nächster Wochentag zum angegebenen Tag, z.B. `13W`: ist der 13. ein Samstag → Freitag, ist er ein Sonntag → Montag |
| `?` | kein spezieller Wert (Platzhalter) |

### Monat

*Innerhalb welchen Monats?*

**Auswahl:**

| Option | Bedeutung |
|--------|-----------|
| jeden | jeden Monat |
| Zahl auswählen | in welchem Monat aktiv? |
| Eingabe | spezielle Angaben mit Cron-Expressions |

**Werte (Cron-Expression):**

| Zeichen | Bedeutung |
|---------|-----------|
| `*` | wie Auswahl "jeden" |
| `1` … `12` bzw. `JAN` … `DEC` | wie Auswahl einer Zahl |
| `,` | mehrere Werte, z.B. `FEB,OCT`: Februar und Oktober |

### Wochentag

*Innerhalb welchen Wochentages?*

**Auswahl:**

| Option | Bedeutung |
|--------|-----------|
| jeden | Timer startet täglich |
| Mo–Fr | Timer startet innerhalb dieses Tages |
| Eingabe | spezielle Angaben mit Cron-Expressions |

**Werte (Cron-Expression):**

| <div style="width:170px">Zeichen</div> | Bedeutung |
|---------|-----------|
| `*` | wie Auswahl "jeden" |
| `1` … `7` bzw. `SUN` … `SAT` | wie "Zahl auswählen" (1 = Sonntag) |
| `,` | mehrere Wochentage, z.B. `MON,FRI`: montags und freitags |
| `-` | Zeitraum, z.B. `MON-FRI`: "wochentags" |
| `L` | allein: letzter Tag (Sonnabend); mit Wochentagszahl: letzter x-Tag im Monat, z.B. `6L`: letzter Freitag im Monat |
| `?` | kein spezieller Wert (Platzhalter) |
| `/` | Inkremente, z.B. `1/2`: alle zwei (Wochen-)Tage mit Start am Sonntag |
| `#` | der wievielte Wochentag im Monat, z.B. `2#1`: erster Montag im Monat (auch `MON#1`) |

### Jahr

*Innerhalb welchen Jahres?*

**Auswahl:**

| Option | Bedeutung |
|--------|-----------|
| jedes | in jedem Jahr |
| Eingabe | individuelle Jahre angeben |

### Wechselwirkungen

#### Wochentag und Tag
z.B. Wochentag "Mo" und Tag "4": jeden Montag, der ein 4. des Monats ist (Monat muss dann auf "jeder" stehen)

#### Monat und Tag
z.B. Monat "jeden" und Tag "31": an jedem 31. des Monats — also nur in Monaten mit 31 Tagen (Tag: "jeder")

#### Monat, Tag und Wochentag
z.B. Monat "9", Wochentag "Fr" und Tag "13": startet nur, wenn der September einen Freitag den 13. hat

Das Ganze lässt sich noch mit dem Jahr koppeln, ist aber m.E. nicht sinnvoll.

### Aktion

Auswahl eines Timer-Actions (siehe unten unter "aktuelle Timerklassen").

### Steuerparameter

siehe unten unter "aktuelle Timerklassen" unter der jeweiligen Klasse

### Cron-Expressions

Cron-Expressions werden verwendet, um eine Instanz eines Cron-Triggers zu konfigurieren. Sie sind Strings aus 7 Einzelwerten, die die individuellen Einzelheiten des Ablaufplans beschreiben. Die Werte werden mit Leerzeichen getrennt und repräsentieren:

```text
0 0 5 * * ? *
┬ ┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │ └── Jahr (optional)
│ │ │ │ │ └──── Wochentag (1-7) (Sonntag=1)
│ │ │ │ └────── Monat (1-12)
│ │ │ └──────── Tag (1-31)
│ │ └────────── Stunde (0-23)
│ └──────────── Minute (0-59)
└────────────── Sekunde (0-59, meist 0)
```

Die zu verwendenden Werte stehen oben unter dem jeweiligen Feld (Tag, Monat usw.).

**Beispiele:**

| <div style="width:170px">Expression</div> | Bedeutung |
|------------|-----------|
| `0 0 12 ? * WED` | jeden Mittwoch um 12:00 Uhr |
| `0 0/5 * * * ?` | alle 5 Minuten (beginnend mit Minute 0) |
| `0 30 10-13 ? * WED,FRI` | um 10:30, 11:30, 12:30 und 13:30, jeden Mittwoch und Freitag |
| `0 0/30 8-9 5,20 * ?` | halbstündlich zwischen 8 und 10 Uhr am 5. und 20. jeden Monats (8:00, 8:30, 9:00, 9:30 — aber nicht 10:00) |

Manche Startzeiten sind zu komplex für einen einzigen Ausdruck, z.B. alle 5 Minuten zwischen 9:00 und 10:00 Uhr *und* alle 20 Minuten zwischen 1:00 und 10:00 Uhr. Das lässt sich nur mit zwei Timern abbilden.

## in alten Versionen

### TimerTaskKlassen

#### veraltet (nicht mehr benutzen)

- `com.batix.timer.ContainerDeActivatorTask` (aktiviert/deeaktiviert alte Containerdatensätze wenn Datum herangekommen ist)
- `com.batix.timer.ContainerRemoveTask` (löscht alte Containerdatensätze wenn Datum herangekommen ist)
- `com.batix.timer.DetailDeactivatorTask` (bx:schleife deaktiviert einzelne Schleifen-Datensätze)
- `com.batix.timer.NavDeActivatorTask` (aktiviert/deeaktiviert Navigationspunkte zu bestimmten Zeitpunkt)
- `com.batix.timer.NewsArchiver` (altes Newssmodul; verschiebt alte News ins Archiv)

#### aktuelle Timerklassen

##### `com.batix.timer.ContainerImportTimer`

aktualisiert einen neuen Container mit Daten von einem anderen System

**Steuerparameter:**

| Parameter | Beschreibung |
|-----------|--------------|
| `container-id=125DA0FBA30` | Container intern |
| `extern-id=10EA47412E6` | Container extern |
| `extern-host=https://www.externer-server.de` | Hostname des externen Systems |
| `img-kat=125A1311768` | Bildergaleriekategorie für importierte Bilder |
| `doc-kat=125A2CE1376` | Bildergalerieordner für importierte Dokumente |
| `flag=html` | Editorfelder mit importieren |

---

##### `com.batix.timer.UserReactivation`

aktiviert gesperrte User, wenn sie 3x falsches Passwort eingegeben hatten

---

##### `com.batix.timer.VisitorStatTimer`

verkürzt Userstatistik

**Steuerparameter:**

| Parameter | Beschreibung |
|-----------|--------------|
| `days-to-keep=60` |  |

---

##### `com.batix.timer.URLConnectionTimer`

ruft URL auf (für gewöhnlich ein Action)

**Steuerparameter:**

| Parameter | Beschreibung |
|-----------|--------------|
| `url=http://www.dein-web.de/aktionen/testaktion.act` | ruft ein Aktion auf |
| `max-redirects=30` | Anzahl der Redirekts (optional) |

---

##### `com.batix.search.CrawlerTask`

Keywords: Web indizieren, Indizierung, Crawler

**Steuerparameter:**

| Parameter | Beschreibung |
|-----------|--------------|
| `sleeptime=500` |  |
| `report-to=Email-Adresse` | liefert einen Report über die Seiten, die beim indizieren 404 zurückgeliefert haben, an die angegebene E-Mail-Adresse, ab 2.6.1 RC15 |
| `report-from=Absender-Adresse` | wenn report-from fehlt, wird noreply@batix.info verwendet |

Um auch Actions zu indizieren (z.B. Weiterleitungen usw. - wenn man sicher ist, daß nix gelöscht wird) kann man im Action in die Metadaten accept-crawler=true eintragen.