MyBB.de Forum

Normale Version: Task/s wird/werden nicht nach vorgegeben Zeitintervallen ausgeführt.
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallole,

warum werden der/die Task/s nicht nach der definierten Zeitvorgabe ausgeführt?

Beispiel:
Ein Task soll alle 20 Minuten (5,25,45) ausgeführt werden. Im ACP steht nach dem Speichern des Task z.B. "Nächste Ausführung 08:20 Uhr". Aber bis z.B. 10:00 Uhr hat sich immer noch (so den LOG-Daten zu entnehmen) nichts getan.

Der Task wird, aus meiner Sicht zufällig, alle X Stunden ausgeführt.

Auch das Erneuern des Cache des Task im ACP erbrachte nicht den gewünschten Erfolg.

Um Fragen vorzubeugen sei fürsorglich erwähnt, dass der Task selbst (manuell gestartet) Fehlerfrei funktioniert! Nur die Zeitsteuerung funktioniert nicht.

Was kann/muss man wo ausführen/bearbeiten, damit die Task zeitdefiniert ausgeführt werden? Ersatzweise die Frage wo die Fehlerquelle liegt bzw. liegen könnte?

Für Tipps und Hinweise vorab besten Dank.
Ein Task läuft niemals nach Zeitvorgabe, sondern immer nur dann, wenn eine Seite aufgerufen wird und der Task fällig ist.
Ohne Besucher kein Task.

Jede geplante Aufgabe wird mit Aufruf dieses unsichtbaren Pseudo-Bildes im Footer gestartet:
Code:
<img src="https://live-escape-game-forum.de/task.php" width="1" height="1" alt="" />
Hier verbirgt sich der Code, der die Tasks abarbeitet.

[ETS]
Danke für die Information.

Könnte die ./task.php über einen Cronjob (z.B. alle 10 Minuten) gestartet werden?
Wenn ja, müsste dazu etwas in der ./task.php angepasst werden?
task.php enthält zwar Konstanten und MyBB-eigne Funktionen... wird aber standardmäßig nicht daran gehindert, aufgerufen und geladen zu werden. Ich denke, die die wird auch nackt arbeiten.
Probiere es einfach auf und tippe die URL in den Browser.

Wenn die task.php unabhängig gestartet werden kann, dann kannst du selbstverständlich einen UNIX-Cronjob einrichten, entweder direkt mittels PHP-Konsole (#/> php <pfad zur task.php>) oder z.B. CURL (curl <URI>).

[ETS]
Die task.php über Cronjob auszuführen, ist möglich.
Dann könntest du auch das task-image aus dem Footer nehmen, um die Taskausführung von MyBB zu unterbinden.

Einzelne Tasks lassen sich nur lokal über MyBB ausführen.
(28.04.2022, 10:18)Schnapsnase schrieb: [ -> ]Die task.php über Cronjob auszuführen, ist möglich.
Supi

(28.04.2022, 10:18)Schnapsnase schrieb: [ -> ]Dann könntest du auch das task-image aus dem Footer nehmen, um die Taskausführung von MyBB zu unterbinden.
Muss aber sicherlich nicht zwingend unterbunden werden.

(28.04.2022, 10:18)Schnapsnase schrieb: [ -> ]Einzelne Tasks lassen sich nur lokal über MyBB ausführen.
Ops, wenn die ./task.php (aktiviert durch den Footer bzw. einen Cronjob) die definierten Tasks ausführt, müssten doch alle Tasks, soweit der Zeitintervall zutrifft, ausgeführt werden und die nächste Ausführung im ACP angezeigt werden.

Ich vermute mal, Deine Begrenzung (nur lokal ausführen) kommt dann zum Tragen wenn:
PHP-Code:
// Disallow direct access to this file for security reasons
if (!defined("IN_MYBB"))
{
    die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.")
}; 
definiert ist. Korrekt?
(28.04.2022, 10:46)Gerti schrieb: [ -> ]Ops, wenn die ./task.php (aktiviert durch den Footer bzw. einen Cronjob) die definierten Tasks ausführt müssten doch alle task, soweit der Zeitintervall zutrifft, ausgeführt wrden.

Richtig, du hast mich evtl. falsch verstanden. Per Cronjob kannst du nur alle Tasks ausführen - mittels der task.php
Möchtest du aber z.B. nur 2-3 bestimmte Tasks ausführen, ist dies nicht möglich.
Wenn du das task-image im Footer belassen willst, dann werden die Tasks auch abseits deines Cronjobs ausgeführt.
Somit würden natürlich Tasks evtl. mehrfach gestartet, was gar nicht nötig wäre.

Der Cronjob bietet ja nur einen Vorteil, wenn deine Seite mal länger nicht besucht wird...
Ich weiß nicht so recht, was du wirklich erreichen willst.
(28.04.2022, 11:24)Schnapsnase schrieb: [ -> ]Per Cronjob kannst du nur alle Tasks ausführen - mittels der task.php
(28.04.2022, 11:24)Schnapsnase schrieb: [ -> ]Ich weiß nicht so recht, was du wirklich erreichen willst.
Ich will das z.B. eine Aufgabe (Userzuordnung) alle zehn Minuten durchgeführt wird. Muss ich die inhaltlich im Detail erläutern?

Wenn ich im Browser die ./task.php aufrufe werden die zeitlich eigentlich relevanten Aufgaben nach dem Zufallsprinzip ausgeführt.

Beispiel:
Task "1" steht nächste Ausführung = 12:05 Uhr (Intervall = 10 MInuten)
12:08 Uhr Task im Browser aufgerufen

Auswirkung:
Task "1" wurde nicht ausgeführt
Task "Send Mail Queue" wurde ausgeführt

12:18 Uhr Task im Browser aufgerufen
Auswirkung:
Task "1" wurde nicht ausgeführt
Task "Mass Mail" wurde ausgeführt
usw.

Nächste Ausführung des Task "1" steht weiterhin auf = 12:05 Uhr

Nebenbei:
Manuell funktioniert die Taskausführung, die nächste Ausführungszeit wird jedoch nicht jedesmal, nach Ausführung, neu gesetzt.
Wenn dir eine pünktliche Ausführung wichtig ist, solltest du auf echte Cronjobs setzen. Das Aufgaben-System im MyBB sorgt zwar dafür, dass alle Aufgaben irgendwann ausgeführt werden, aber durchaus auch Minuten, Stunden oder Tage später. Die Aufgaben, die am längsten überfällig sind, werden dabei zu erst abgearbeitet, allerdings übersprungene Termine nicht nachgeholt.
Danke für Deine Ausführung. Das habe ich jedoch mittlerweile auch erkannt!

Da mir die pünkliche Ausführung wichtig ist, habe ich einen Cronjob angelegt, welcher alle zwei Minuten ausgeführt wird.
(Um die Doppelinitiierung zu unterbinden, habe ich im Footer-Template {task_image} auskommentier.)

Nachdem es immer noch nicht sauber zeitgerecht funktionierte habe ich in der ./task.php die Zeile
PHP-Code:
if($task['locked'] != && $task['locked'] > TIME_NOW-300
zu
PHP-Code:
in if($task['locked'] != && $task['locked'] > TIME_NOW-1
geändert und schwupp wurden die Tasks, zumindest die letzten 16 Stunden, zeitgerecht ausgeführt.


Nebenbei (bei Bedarf Abtrennen und neuem Tread zuweisen):

1. Wird der Task Send Mail Queue ausgeführt, wird im Logfile immer "Es wurden 10 E-Mails aus der Warteschlange versendet." angezeigt. Dies obwohl definitiv keine Mails (welche auch, ist ja das Testforum) versendet wurden.
Was ist da wo inkorrekt definiert?

2. Task Datenbank optimieren (Quelle: hier (Autor = StefanT)
die Datenbank (gehostet bei Webgo) zeigt immer wieder auf, das einige Tabellen nicht optimiert sind.
Dies wollte ich mit einem Task optimieren.
Egal ob ich (gesamte Datenbank):
PHP-Code:
function task_opt_database($task)
{
    global 
$db$config;
    
    
$table_list $db->list_tables($config['database']['database']);
    foreach(
$table_list as $id => $table_name)
    {
        
$db->optimize_table($table_name);
    }
    
    
add_task_log($task'Die Datenbank wurde optimiert');

oder (ausgewählte Tabellen)
PHP-Code:
function task_opt_database_tables($task)
{
    global 
$db$config;

    
$db->optimize_table('tabellenname');
    
$db->optimize_table('tabellenname');
    
$db->optimize_table('tabellenname');
    
$db->optimize_table('tabellenname');
    
$db->optimize_table('tabellenname');
        
// u.s.w.

    
add_task_log($task'Im Task definierte Tabellen wurden optimiert');

verwende, die Tabellen werden nicht optimiert.
Führe ich die Datenbankoptimierung über das ACP aus, werden sie optimiert.
Was ist an den vorstehenden Defintionen inkorrekt?
Seiten: 1 2