Cron-Einträge

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Cron-Einträge

Beitrag von D@ve »

Hat schon jemand Erfahrungen mit der Cron-Funktionalität? Hab da im englischen Forum einiges dazu gelesen, aber irgendwie fand ich das nicht sehr erhellend. Gibt es da ein Tutorial zu, wie man das in seine Extensions integriert?

Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: Cron-Einträge

Beitrag von D@ve »

Also anscheinend kann man über die services.yml irgendwie cron-Tasks hinzufügen:

Code: Alles auswählen

services:
    cron.task.core.DeleteInactiveUsers:
        class: forumhulp\DeleteInactiveUsers\cron\task\core\delete_inactive_users
        arguments:
            - @user
            - @config
            - @config_text
            - @dbal.conn
            - @log
            - %core.root_path%
            - %core.php_ext%
        calls:
            - [set_name, [cron.task.core.delete_inactive_users]]
        tags:
            - { name: cron.task }
Quelle: https://raw.githubusercontent.com/Forum ... rvices.yml

Aber so richtig werde ich da noch nicht schlau raus, wie man das jetzt in der Extension auswertet...

Gruß, Dave

PS : Wieso wurde das in "Administration und Benutzung" verschoben?
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17395
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Cron-Einträge

Beitrag von Dr.Death »

Hi,

schau Dir mal meinen Cron Job für eine eMail Benachrichtigung an:

https://github.com/DrDeath/phpbb-ext-f1 ... rvices.yml
https://github.com/DrDeath/phpbb-ext-f1 ... minder.php


Der Cron Job prüft einmal täglich ob ein Rennen in den nächsten 3 Tagen stattfindet, falls ja, wird eine eMail versendet und das Rennen "markiert", damit es nicht am nächsten Tag erneut erkannt wird.

Der Abschnitt public function run() ist der eigentliche Cron Job, public function is_runnable() entscheidet ob der Cron Job überhaupt aktiviert ist oder nicht, public function should_run() startet den Cron Job, wenn er aktiviert ist und die entsprechende Zeit/Option erreicht wurde.

In der services.yml wird der Cron Job dem System bekannt gemacht und in die Liste aller verfügbaren Cron Jobs eingereiht.
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: Cron-Einträge

Beitrag von D@ve »

Vielen Dank, der Groschen ist jetzt gefallen... Schade dass es keine vernünftigen Tutorials/Howtos gibt...

Die Verzeichnisnamen cron/task ist das Konvention, oder kann man da auch eigene Verzeichnisse nehmen?
Kriege gerade nur Fehlermeldungen, dass er meine Klasse nicht findet:

Code: Alles auswählen

    dave.userdelete.crons.remove_user_cron:
        class: dave\userdelete\crons\remove_user_cron
        arguments:
            - @config
            - @dbal.conn
            - @log
            - @user
        calls:
            - [set_name, [ dave.userdelete.crons.remove_user_cron]]
        tags:
            - { name: cron.task }  

und

Code: Alles auswählen

<?php
/**
*
* @package phpBB Extension - User Delete
* @copyright (c) 2014 Dave Remmel www.2phpbb.de
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/

namespace dave\user_delete\crons;
use Symfony\Component\DependencyInjection\Container;


class remove_user_cron extends \phpbb\cron\task\base
{
    protected $db;
    protected $user;
    protected $log;
    protected $config;
    ///public function __construct($root_path, $php_ext, Container $phpbb_container, \phpbb\extension\manager $phpbb_extension_manager, \phpbb\path_helper $phpbb_path_helper, \phpbb\db\driver\driver_interface $db, \phpbb\config\config $config, \phpbb\log\log_interface $log, \phpbb\user $user)

    
    public function __construct(\phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, \phpbb\log\log_interface $log, \phpbb\user $user)
    {
        $this->config = $config;
        $this->db = $db;
        $this->log = $log;
        $this->user = $user;
    }    
    
    /**
    * Returns whether this cron task can run, given current board configuration.
    *
    * @return bool
    */
    public function is_runnable()
    {
        return $this->config['delete_user_enabled'] ? true : false;
    }
    
    /**
    * Diese Funktion wird vom Cron Task aufgerufen und überprüft ob der Cron-Task laufen soll, oder nicht
    * gibt sie true zurück wird die run() Methode aufgerufen
    *
    * @return bool
    */
    public function should_run()
    {
        $check_time = (int) gmdate('mdY',time());
        return (($this->config['delete_user_last_run'] + $this->config['delete_user_cron_period']) < time() ) ? false : true;
    }    

    
    public function run()
    {
        include($phpbb_root_path . 'includes_cms/class.cms_user.' . $phpEx);
        $user_OBJ = new cms_user();    
        
        $sql = "SELECT udt.*,  ut.username
                    FROM " . $table_prefix . "users_delete udt
                    LEFT JOIN " . USERS_TABLE . " ut
                        ON ut.user_id = udt.user_id
                    WHERE delete_time < " . (time() - 3600) . "
                        AND deleted <> 1";
        $result = $db->sql_query($sql);

        while ($dat_ARY = $db->sql_fetchrow($result))
        {
            echo $dat_ARY['username'] . "<br/>";
            
            //Benutzer löschen
            if ($user_OBJ->delete($dat_ARY['user_id'], $config['delete_user_mode']))
            {
                $sql = "UPDATE " . $table_prefix . "users_delete
                            SET deleted = 1 
                            WHERE user_id = " . $dat_ARY['user_id'];
                $result = $db->sql_query($sql);
            }
        }        
    }
}

?>
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: Cron-Einträge

Beitrag von D@ve »

Hat sich erledigt, Fehler gefunden... war nur ein blöder underscore im namespace der da nicht hingehört hat...

Wie oft wird der Cron-Task denn regulär (also unabhängig von should_run()) aufgerufen? Bei jedem Seitenaufruf?
Irgendwie wird mein crontask nicht ausgeführt, obwohl ich bei should_run() und is_runnable() pauschal true zurückgebe...

Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: Cron-Einträge

Beitrag von D@ve »

Läuft immer noch nicht... grmpf

Muss der Ordner "cron" heißen und einen Unterordner task haben? Ist das Konvention, oder geht das auch anders?
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
Elsensee
Ehemaliges Teammitglied
Beiträge: 832
Registriert: 19.05.2010 15:14
Wohnort: Hamburg
Kontaktdaten:

Re: Cron-Einträge

Beitrag von Elsensee »

Ich denke, du musst die Extension deinstallieren und wieder neu installieren bei Änderungen an der services.yml, wenn du das noch nicht getan hast. (Es sollte auch bereits helfen, den Cache zu löschen)

Wenn gerade kein maximal einstündiger Cron-Lock aktiv ist, wird Cron übrigens immer aufgerufen, wenn's grad was gibt, was man machen kann. :)
Posts mostly powered by GitHub and phpBB.de Cross-Reference

2015-03-20 - Never forget 8)
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: Cron-Einträge

Beitrag von D@ve »

Deinstalliert und Cache gelöscht habe ich natürlich schon...

Was ist ein Cron-Lock, bzw. wodurch wird der ausgelöst?
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17395
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Cron-Einträge

Beitrag von Dr.Death »

Moin,

Du könntest auch mal versuchen einiges über den Command Line Interpreter (cli) zu aktivieren.

Leider sind die Wiki phpbb.com Seiten momentan nicht erreichbar.

Wenn dein Webserver läuft könntest Du von der Command Line (Dosbox, Terminal, Konsole...) einige Befehle direkt an die phpBB Engine schicken.

Code: Alles auswählen

./bin/phpbbcli.php cron:list
./bin/phpbbcli.php cron:run
./bin/phpbbcli.php config:get cron_lock
./bin/phpbbcli.php config:set cron_lock 0
./bin/phpbbcli.php config:set drdeath_f1webtip_reminder_last_run 1
./bin/phpbbcli.php cron:run drdeath.f1webtip.cron.task.email_reminder
./bin/phpbbcli.php cron:run cron.task.core.tidy_database
Benutzeravatar
Unimatrix_0
Mitglied
Beiträge: 392
Registriert: 03.11.2007 10:50
Kontaktdaten:

Re: Cron-Einträge

Beitrag von Unimatrix_0 »

Wenn phpbb.com wieder online ist, kannst du auch mit folgender Extension den Status der CronTasks abrufen:
https://www.phpbb.com/community/viewtop ... &t=2256961
Antworten

Zurück zu „Extension Bastelstube“