BISO verwendet crunz als zentralen Task-Scheduler. Anstatt für jede wiederkehrende Aufgabe einen eigenen Cronjob einzurichten, wird nur ein einziger Cronjob benötigt. Der Scheduler prüft selbständig, welche Tasks fällig sind und führt diese aus.
Die Task-Dateien befinden sich im Verzeichnis webroot/backend/scheduler/tasks/. Einzelne Tasks
werden je nach Konfiguration (Config) oder Parameter (Admin > Parameter) bedingt aktiviert.
Auf dem Kundensystem muss ein einziger Crontab-Eintrag eingerichtet werden, der jede Minute läuft:
* * * * * www-data /usr/bin/php /var/www/biso/webroot/biso-cli scheduler run
Hinweis: Der Pfad
/var/www/biso/webroot/muss an die jeweilige Installation angepasst werden.
Der Scheduler delegiert an crunz, welches die einzelnen Task-Dateien einliest und nur die zum
jeweiligen Zeitpunkt fälligen Tasks ausführt. Überlappende Ausführungen werden durch
preventOverlapping() verhindert.
| Befehl | Beschreibung |
|---|---|
php biso-cli scheduler list |
Alle registrierten Tasks mit Zeitplan anzeigen |
php biso-cli scheduler run |
Fällige Tasks ausführen |
php biso-cli scheduler run --force |
Alle Tasks sofort ausführen (unabhängig vom Zeitplan) |
php biso-cli scheduler run --task=N |
Bestimmten Task nach Nummer ausführen |
Um einen neuen Scheduler-Task hinzuzufügen, wird eine neue PHP-Datei im Verzeichnis
webroot/backend/scheduler/tasks/ erstellt. Der Dateiname muss auf Tasks.php enden
(z.B. MeinNeuerTasks.php).
Grundstruktur einer Task-Datei:
<?php
use Crunz\Schedule;
require_once __DIR__ . '/../../../components/composer/kadenpartner/gaia/bootstrap.php';
$schedule = new Schedule();
// Bedingte Aktivierung (optional):
if (Param::get('mein_feature_aktiv', false)) {
$schedule->run(PHP_BINARY . ' ' . Config::get('rootdir') . '/biso-cli mein-command')
->daily()->at('08:00')
->description('Beschreibung des Tasks')
->preventOverlapping()
->appendOutputTo(Config::get('tmpdir') . '/mein-task.log');
}
return $schedule;
| Methode | Beschreibung |
|---|---|
->everyMinute() |
Jede Minute |
->hourly() |
Stündlich |
->hourlyAt('15') |
Stündlich um Minute 15 |
->daily() |
Täglich um Mitternacht |
->daily()->at('08:00') |
Täglich um 08:00 |
->weekly() |
Wöchentlich |
->weeklyOn(1, '13:30') |
Wöchentlich am Montag um 13:30 (0=Sonntag) |
->monthly() |
Monatlich |
->cron('30 8 * * Mon,Fri') |
Beliebiger Cron-Ausdruck |
->preventOverlapping() verwenden, um parallele Ausführungen desselben Tasks zu verhindern->appendOutputTo(Config::get('tmpdir') . '/taskname.log') verwenden, um Output in eine Log-Datei zu schreiben->description('...') setzen, damit der Task in scheduler list identifizierbar istJeder Task schreibt seine Ausgabe in eine eigene Log-Datei im Verzeichnis data/tmp/:
SMS-Erinnerungen können via SMTP-Gateway versendet werden.
In der Config.php muss die SMS-Gateway Mail-Domain und -Sender gesetzt werden:
Config::set('sms_gateway_mail_domain', 'smsc.admin.ch');
Config::set('sms_gateway_mail_sender', 'info@kunde.ch');
Config::set('sms_ausloeser_username', 'admin');
| Parameter | Bezeichnung | Bedeutung |
|---|---|---|
| sms_versand | Mit Termin-SMS | Termin-SMS Modul ein/aus |
| sms_notification_time | Erinnerungs-Distanz in Stunden | Definiert die zeitliche Distanz vor dem Termin, in der eine SMS-Erinnerung ausgelöst wird |
| sms_versand_manuell | manuell Auslösen | SMS kann über die Termin-Oberfläche manuell ausgelöst werden |
| sms_versand_termin_vorlage | Termin-Vorlage | Vorlage für die BF-Termine kann max. 160 Zeichen lang sein |
| sms_versand_test_vorlage | Gruppentest-Vorlage | Vorlage für die Gruppentest-Termine kann max. 160 Zeichen lang sein |
Damit die SMS-Termin Mail's an den SMS-Gateway gesendet werden, muss in regelmaessigen Abstaenden
das CLI-Command biso-cli termin-sms --do-it ausgeführt werden.
Beispiel Linux Crontab:
0 * * * * www-data /usr/bin/php /var/www/biso/webroot/biso-cli termin-sms --do-it
Nach Fallabschluss können Fälle mit einem Nachbefragungs-Email beliefert werden. Dazu sind folgende Voraussetzungen notwendig:
Die Nachbefragung wird via Cron-Job z.B. täglich angestossen:
$ php webroot/biso-cli send-nachbefragung
Folgende Konfigurationen sind für die Nachbefragung relevant:
Kunden-Spezialconfigs
Config::set('nachbefragung.ausnahme_termin_distanz_tage', 14): Ausnahme: Wenn der letzte Termin
x Tage vor dem Fallabschluss liegt, wird kein Versand ausgelöstDer Nachbefragungs-CLI-Job loggt seinen Output in ein separates Logging-Target:
SendNachbefragung
Die Logs können somit in ein eigenes Logfile oder auf die Konsole geleitet werden:
// config.php:
Config::set('LOGGING', [
'SendNachbefragung' => [
'type' => Logger::TYPE_CONSOLE,
'level' => Logger::DEBUG,
]
]);
Das Log-System setzt eine zweite Datenbank mit der Tabelle Log voraus.
CREATE DATABASE biso_log
WITH
OWNER = bisoadm
ENCODING = 'UTF8'
LC_COLLATE = 'de_CH.utf8'
LC_CTYPE = 'de_CH.utf8'
TABLESPACE = pg_default
CONNECTION LIMIT = -1
CREATE TABLE IF NOT EXISTS log
(
id serial NOT NULL,
logtime timestamp,
context text,
benutzer text,
action text,
record_id int,
record text ,
CONSTRAINT log_pkey PRIMARY KEY (id)
)
In der Config.php muss man eine zweite DB Connection eintragen sowie kann man das Log-System für Store oder Destroy Aktionen seperat aktivieren.
$db['log'] = array();
$db['log']['pdo-dsn'] = 'pgsql:host=XXX.XXX.XXX.XXX port=5432 dbname=biso_log';
$db['log']['username'] = 'bisoadm';
$db['log']['password'] = 'PASSWORD';
$db['log']['schema'] = 'public';
Config::set('LOG_STORE', false);
Config::set('LOG_DESTROY', true);
Siehe Background-Job-System für die Dokumentation des Job-Queue-Systems.