Seite 1 von 3
Cron-Einträge
Verfasst: 15.12.2014 11:14
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
Re: Cron-Einträge
Verfasst: 17.12.2014 00:20
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?
Re: Cron-Einträge
Verfasst: 17.12.2014 09:13
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.
Re: Cron-Einträge
Verfasst: 18.12.2014 15:14
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);
}
}
}
}
?>
Re: Cron-Einträge
Verfasst: 18.12.2014 15:53
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
Re: Cron-Einträge
Verfasst: 19.12.2014 00:28
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?
Re: Cron-Einträge
Verfasst: 19.12.2014 01:17
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.

Re: Cron-Einträge
Verfasst: 19.12.2014 01:23
von D@ve
Deinstalliert und Cache gelöscht habe ich natürlich schon...
Was ist ein Cron-Lock, bzw. wodurch wird der ausgelöst?
Re: Cron-Einträge
Verfasst: 19.12.2014 08:16
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
Re: Cron-Einträge
Verfasst: 19.12.2014 09:56
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