MyBB.de Forum

Normale Version: Task wird nicht ausgeführt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hi Leute,

ich lasse in einem Plugin folgenden Task anlegen:
PHP-Code:
// Check if Task Exists
    $taskExists $db->simple_select(
        'tasks',
        'tid',
        'file = \'sn_meintask\'',
        array('limit' => '1')
    );

    // create new Task
    if ($numRows == 0) {
        require_once MYBB_ROOT '/inc/functions_task.php';

        $new_task = [
            'title' => $lang->sn_taskname,
            'description' => $db->escape_string($lang->sn_meintask_desc),
            'file' => 'sn_meintask',
            'minute' => '*',
            'hour' => '*',
            'day' => '*',
            'month' => '*',
            'weekday' => '7',
            'enabled' => '1',
            'logging' => '1',
        ];

        $new_task['nextrun'] = fetch_next_run($new_task);

        $db->insert_query('tasks'$new_task);
        
$cache->update_tasks();
    

Die Task-Datei funktioniert einwandfrei, wenn man sie in der Aufgabenplanung manuell startet.
Über den Scheduler wird die Task-Datei allerdings nie gestartet.
Ich finde keinen Fehler und weiß mir momentan keinen Rat. Sad
Und ja, es sind an diesem Wochentag auch User eingeloggt und ja, andere Tasks funktionieren. Wink 
Es muss also an "mir" liegen. Rolleyes

Hat jemand eine Idee??
$numRows scheint nicht definiert zu sein Wink
Hallo Sven,

danke, damit hast Du zwar recht, aber es wird trotzdem nichts gestartet.
Hier nochmal die überarbeitete Version:

PHP-Code:
// Check if Task Exists
    $taskExists $db->simple_select(
        'tasks',
        'tid',
        'file = \'sn_meintask\'',
        array('limit' => '1')
    );
  
    $numRows 
$db->num_rows($taskExists);

    // create new Task
    if ($numRows == 0) {
        require_once MYBB_ROOT '/inc/functions_task.php';

        $new_task = [
            'title' => $lang->sn_taskname,
            'description' => $db->escape_string($lang->sn_meintask_desc),
            'file' => 'sn_meintask',
            'minute' => '*',
            'hour' => '*',
            'day' => '*',
            'month' => '*',
            'weekday' => '7',
            'enabled' => '1',
            'logging' => '1',
        ];

        $new_task['nextrun'] = fetch_next_run($new_task);

        $db->insert_query('tasks'$new_task);
 
$cache->update_tasks();
    
Hast du mal versucht die Aufgabe manuell neu zu definieren, also nicht via Plugin anlegen zu lassen?
Wenn ich die Frage von SvePu lese, fällt mir ein, dass ich auch mal einen Task gemacht habe, welcher bestimmte User in entsprechende Unterguppen zuweist. Der Task funktionerte erst als ich ihn einmal im ACP bearbeitete, abspeicherte und manuell ausführte. Seither läuft er entsprechend dem eingestellten Zeitintervall. Warum, wieso, weshalb war mir damals egal, das Ziel war erreicht.

Zum Task:
Mir war es einfach zu Zeitintensiv immer darauf zu achten dass bestimmte User mit entsprechenden Merkmalen auch bestimmte Rechte (z.B. zusätzliche Gruppen) erhalten, oder entzogen bekommen. Jetzt macht es der Task alle 60 Minuten automatisch.
(28.03.2021, 18:17)SvePu schrieb: [ -> ]Hast du mal versucht die Aufgabe manuell neu zu definieren,

Ja hatte ich mal, kann es aber nochmal testen. Ich habe auch schon x-mal im Scheduler die Zeiten geändert und neu abgespeichert - nichts.

Was mich wundert: In der Augabenverwaltung hängt die nächste Ausführungszeit immer 1 Stunde hinter der aktuellen Zeit hinterher, obwohl im ACP die Zeitzone und Sommerzeitkorrektur korrekt eingestellt ist.
Kann das ein Grund sein? Die nächste Ausführungszeit liegt also augenscheinlich immer in der Vergangenheit. Rolleyes
Nur ein Hinweis zur Erinnerung:
Nicht vergessen, nach einer Task-Änderung das Forum neu aufzurufen.
Ein Task mit definiertem Intervall läuft niemlas von allein (es ist nicht vergleichbar mit einem Cronjob) - er wird nur dann ausgeführt, wenn das Forum und somit das "<img src="task.php"> im Footer aufgerufen wrid. Denn das ist der Trigger.
Alle fälligen Tasks werden immer beim nächsten Seitenaufruf abgearbeitet.

[EXiTuS]
@[EXiTuS]

Ist mir alles klar. So wenige User habe ich dann doch nicht im Forum, dass es tagelang stillsteht. Big Grin 
Der Scheduler läuft auch fleißig zum nächsten Ausführungszeitpunkt sobald sich wer eingeloggt hat.
Der Task wurde aber trotzdem nicht ausgeführt. Und ja, die Task-Datei ist vorhanden und funktioniert perfekt.

Ich habe schon andere Sachen verschlimmbessert, aber hier komme ich mir gerade richtig blöd vor.
Es war auch nicht geplant, dass ich mir jede Nacht den Wecker stelle, um den Task selbst auszuführen. Big Grin Big Grin
Das Problem ist die Zeitangabe. Der Wochentag wird bei PHP von 0 (Sonntag) bis 6 (Samstag) durchnummeriert und auch die Sterne bei Minuten und Stunde machen wahrscheinlich etwas anderes als du denkst. Ich vermute, dass du "einmalig, egal zu welcher Uhrzeit" meintest, tatsächlich bedeutet das aber "jedes Mal", also von 00:00 bis 23:59 Uhr insgesamt bis zu 1440 mal.

(28.03.2021, 19:11)Schnapsnase schrieb: [ -> ]Was mich wundert: In der Augabenverwaltung hängt die nächste Ausführungszeit immer 1 Stunde hinter der aktuellen Zeit hinterher, obwohl im ACP die Zeitzone und Sommerzeitkorrektur korrekt eingestellt ist.
Kann das ein Grund sein? Die nächste Ausführungszeit liegt also augenscheinlich immer in der Vergangenheit. Rolleyes
Ich habe es nicht nachgeschaut, aber vermutlich gilt beim Aufgabensystem die Serverzeit oder GMT. Für die Aufgaben sind Zeitzonen nicht relevant.
(29.03.2021, 09:52)StefanT schrieb: [ -> ]..tatsächlich bedeutet das aber "jedes Mal", also von 00:00 bis 23:59 Uhr insgesamt bis zu 1440 mal.

Hallo Stefan,

ja das leuchtet alles ein, aber egal wie es definiert ist...(ich habe testweise auch schon "jeden Wochentag/jede Stunde" definiert)
Irgendwann muss doch dieser verdammte Task mal starten - tut er aber nicht.
Seiten: 1 2 3