Der Scheduler muss vom Betriebssystem periodisch angetriggert werden (z.B. jede Minute), um eventuell anstehende asynchrone Aufgaben in raum]für[raum abarbeiten zu können.

Dafür muss das CLI-Tool concierge mit folgendem Kommando mit einem entsprechend privilegiertem Benutzer aufgerufen werden:

./concierge.ps1 rfr:scheduler

Unter Windows-Systemen bietet sich dafür die Aufgabenplanung an, unter Linux-Systemen die Cronjobs. Beide Verfahren werden im folgenden beschrieben.

Scheduler unter Windows-Systemen: Aufgabenplanung

Wenn der angelegte Job nicht automatisch wiederholt wird

Vor dem Speichern des Aufgabenplanungsjobs darauf achten, dass der erste Start auf jeden Fall in der Zukunft liegt. Andernfalls kann der Job zwar manuell gestartet werden, wird aber nie automatisch wiederholt .

Scheduler Debugging Hinweis

Wenn die AppPool Identity ein Windows Benutzer ist, der nicht mit dem lokalen Server Admin Benutzer identisch ist, dann kann eine Windows Konsole mit diesem Befehl unter dem betreffenden Benutzer gestartet werden:

runas /user:domain\username cmd.exe

Scheduler unter Linux-Systemen: Cronjob

Es gibt zwei Möglichkeiten zur Implementierung des Cronjobs:

  1. Vom Benutzer (unter denen die PHP Skripte ausgeführt werden) verwaltete Cronjobs
  2. Vom Administrator verwaltete Cronjobs

Benutzer-Cronjob

Nachfolgend wird beschrieben, wie ein Benutzer-Cronjob erstellt wird. Im Gegensatz zu einem systemweiten Cronjob, kann prinzipiell jeder nicht-privilegierter Betriebssystem-Benutzer seine eigenen wiederkehrenden Aufgaben erstellenund verwalten. Die ausgeführten Befehle laufen immer in der Laufzeitumgebung des Betriebssystembenutzers, der den Crobjob erstellt.

Cron-Bearbeitung als Admin

crontab -u <Name-des-PHP-Betriebssystembenutzers> -e

Cron-Bearbeitung als nicht privilegierter Betriebssystembenutzer

# sudo -u <Name-des-PHP-Betriebssystembenutzers> /bin/bash
$ crontab -e

Inhalt des Cronjobs

Syntax für Benutzer Cronjobs
# For details see man 4 crontabs
 
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
Grundsätzlich wird jeder Cronjob in einer einzigen Zeile konfiguriert. Aus Gründen der Übersichtlichkeit sind die nachfolgenden Ausgaben umgebrochen dargestellt.
Beispielinhalt eines Benutzer Cronjobs
* * * * *
RFR_BASE_DIR=/path/to/raumfuerraum/htdocs &&
test -e ${RFR_BASE_DIR}/concierge.ps1 &&
cd ${RFR_BASE_DIR} &&
${PHP_BASE_DIR}/concierge.ps1 rfr:scheduler 1>/dev/null
Beispiel für Bereinigung der PHP Session Dateien (nach 120 Minuten Leerlauf)
09,39 * * * *
RFR_BASE_DIR=/path/to/raumfuerraum &&
test -d ${RFR_BASE_DIR}/sessiondata &&
find ${RFR_BASE_DIR}/sessiondata -mindepth 1 -maxdepth 1 -type f -name "sess_*" -cmin +120 -exec rm -f {} \; 1>/dev/null


Admin-Cronjob

Nachfolgend wird beschrieben, wie ein betriebssystemweiter Cronjob erstellt wird.

Cron-Bearbeitung als Admin

Für einen global verwalteten Cronjob wird der Betriebssystembenutzer benötigt, der das Skript ausführt.
# crontab -e 
Syntax für globale Cronjobs
# For details see man 4 crontabs
 
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
Grundsätzlich wird jeder Cronjob in einer einzigen Zeile konfiguriert. Aus Gründen der Übersichtlichkeit sind die nachfolgenden Ausgaben umgebrochen dargestellt.
Beispielinhalt eines globalen Cronjobs
* * * * *
<PHP-Betriebssystembenutzer>
RFR_BASE_DIR=/path/to/raumfuerraum/htdocs &&
test -e ${RFR_BASE_DIR}/concierge.ps1 &&
cd ${RFR_BASE_DIR} &&
${PHP_BASE_DIR}/concierge.ps1 rfr:scheduler 1>/dev/null
Beispiel für Bereinigung der PHP Session Dateien (nach 120 Minuten Leerlauf) als globaler Cronjob
09,39 * * * *
<PHP-Betriebssystembenutzer>
RFR_BASE_DIR=/path/to/raumfuerraum &&
test -d ${RFR_BASE_DIR}/sessiondata &&
find ${RFR_BASE_DIR}/sessiondata -mindepth 1 -maxdepth 1 -type f -name "sess_*" -cmin +120 -exec rm -f {} \; 1>/dev/null