Problem Cronjobs Plugin

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Problem Cronjobs Plugin

Beitrag von derju »

Guten Morgen

Folgendes Problem:

Über das Cronjob Plugin habe ich ein Paar Cronjobs am laufen (V. 4.9.7).
Es zeigt an das diese Durchgeführt wurden, nur leider ist das nicht der fall.
Wenn ich diese manuell anstosse funktioniert es.

Wo könnte hier das Problem liegen?

LG - derJu
Contenido 4.8.20 | Contenido 4.9.12
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Problem Cronjobs Plugin

Beitrag von Oldperl »

derju hat geschrieben:Wo könnte hier das Problem liegen?
Am Wetter?! Es wird heiß! 8)

Spaß beiseite, ein bisserl wenig Infos sind das schon. Was hast Du genau gemacht? Laufen die Cronjobs des Core durch? Steht was in den Logs?

Wir brauchen Input! (frei nach Nummer 5) ;)

Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Problem Cronjobs Plugin

Beitrag von homtata »

Ich denke, ich hatte das auch schon mal und bin da einem Irrglauben aufgesessen.
Die Contenido-Cronjobs sind lediglich Pseudo-Cronjobs, das heißt: sie laufen nicht servergesteuert, sondern benötigen einen Trigger, der sie auslöst. Das ist hier ein Besuch auf der Webseite um diese Uhrzeit. Findet dort kein Traffic statt, wird der Pseudo-Cronjob auch nicht ausgelöst. Diese Cronjobs eignen sich somit eigentlich nur für hochfrequentierte Seiten. Für alles andere benötigt man (sofern der eigene Server nicht cronjobfähig ist) einen externen (kostenfreien) Cronjob-Service.

LG
Viktor
Faar
Beiträge: 1951
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Hat sich bedankt: 15 Mal
Kontaktdaten:

Re: Problem Cronjobs Plugin

Beitrag von Faar »

Ja, scheint nur ein Pseudo-Cron zu sein:
https://docs.contenido.org/display/CONDEVE/Cronjob

Aber man macht dabei auch wahnsinnig schnell Fehler und denkt, man hätte alles richtig eingetragen, dabei tut es ganz was anderes oder gar nichts.
https://wiki.ubuntuusers.de/cron

Testen ob er läuft kann man am besten, wenn man eine kurze Zeit einstellt (alle 2 min) und lediglich ein Echo ausgibt (falls man an der Konsole sitzt) oder etwas in ein Logfile schreibt.
Dann weiß man, er läuft prinzipiell (Logfile würde ich als Standard immer empfehlen).
Manche Hoster, die echte Cronjobs auch auf Shared Hosting anbieten, haben ein extra Verzeichnis dafür, wo die Crontab hinein muss (Achtung, Pfade kontrollieren) oder ein Fenster, wo man den Crontab-Text hineinkopieren kann.
So geht es dann natürlich nicht mit der Contenido Version aber wer einen echten Cronjob zur Verfügung hat, sollte diesen nutzen.
Ansonsten muss man bei Linux/Unix Servern selbst schauen, wie der Pfad zur Crontab ist.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Problem Cronjobs Plugin

Beitrag von derju »

Ich denke, ich hatte das auch schon mal und bin da einem Irrglauben aufgesessen.
Die Contenido-Cronjobs sind lediglich Pseudo-Cronjobs, das heißt: sie laufen nicht servergesteuert, sondern benötigen einen Trigger, der sie auslöst. Das ist hier ein Besuch auf der Webseite um diese Uhrzeit. Findet dort kein Traffic statt, wird der Pseudo-Cronjob auch nicht ausgelöst. Diese Cronjobs eignen sich somit eigentlich nur für hochfrequentierte Seiten. Für alles andere benötigt man (sofern der eigene Server nicht cronjobfähig ist) einen externen (kostenfreien) Cronjob-Service.

LG
Viktor
Ok aber weshalb zeigt er dann an das er ausgeführt wurde.

LG - derJu
Contenido 4.8.20 | Contenido 4.9.12
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Problem Cronjobs Plugin

Beitrag von derju »

Hier meine crontab.txt

Code: Alles auswählen

*/2 * * * * move_articles.php
*/5 * * * * send_reminder.php
0 0 1 * * move_old_stats.php
0 0 * * * optimize_database.php
*/5 * * * * send_reminder.php
*/5 * * * * setfrontenduserstate.php
15 2 * * * import_members.php
20 2 * * * import_branchen.php
40 14 * * * import_frontend_users.php
30 2 * * * import_newsletter_recipients.php      
45 2 * * * import_newsletter_e_recipients.php  
50 2 * * * import_newsletter_group.php
#02 1 * * * linkchecker.php
0 0 * * * maintain_password_reset_requests.php
#*/2 * * * * test.php
*/2 * * * * importFrontendUsers.php
LG - derJu
Contenido 4.8.20 | Contenido 4.9.12
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Problem Cronjobs Plugin

Beitrag von derju »

Code: Alles auswählen

<?php
/**
 * Template cronjob file
 *
 * @package    Core
 * @subpackage Cronjob
 *
 * @author     claus.schunk@4fb.de
 * @copyright  four for business AG <www.4fb.de>
 * @license    http://www.contenido.org/license/LIZENZ.txt
 * @link       http://www.4fb.de
 * @link       http://www.contenido.org
 */
 
if (!defined('CON_FRAMEWORK')) {
    define('CON_FRAMEWORK', true);
}
 
// CONTENIDO path
$contenidoPath = str_replace('\\', '/', realpath(dirname(__FILE__) . '/../')) . '/';
 
// CONTENIDO startup process
include_once($contenidoPath . 'includes/startup.php');
 
$cfg = cRegistry::getConfig(); 
 
require_once(cRegistry::getBackendPath() . $cfg['path']['includes'] . 'pseudo-cron.inc.php');


require_once $backendPath . $cfg['path']['classes'] . 'contenido/class.user.php';
require_once $backendPath . $cfg['path']['classes'] . 'class.xml.php';
require_once $backendPath . $cfg['path']['classes'] . 'contenido/class.frontend.user.php';
require_once $backendPath . $cfg['path']['classes'] . 'contenido/class.frontend.group.php';
require_once $backendPath . $cfg['path']['classes'] . 'contenido/class.frontend.group.member.php';


 
if (!isRunningFromWeb() || function_exists('runJob') || $area == 'cronjobs') {

	class PX_FrontEndUser {
		var $AdrId;
		var $AdrLogin;
		var $AdrPW;
		var $AdrEmail;
		
		function PX_FrontEndUser($aa) {
			foreach ($aa as $k=>$v)
				$this->$k = $aa[$k];
		}
	}
	
	function readDatabase($filename) {
		// read the XML database of aminoacids
		$data = implode("", file($filename));
		$parser = xml_parser_create();
		xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
		xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
		xml_parse_into_struct($parser, $data, $values, $tags);
		xml_parser_free($parser);
	
		// loop through the structures
		foreach ($tags as $key=>$val) {
			if ($key == "qryAdressLogin") {
				$ranges = $val;
				// each contiguous pair of array entries are the 
				// lower and upper range for each molecule definition
				for ($i=0; $i < count($ranges); $i+=2) {
						$offset = $ranges[$i] + 1;
					$len = $ranges[$i + 1] - $offset;
					$tdb[] = parseNode(array_slice($values, $offset, $len));
				}
			} else {
				continue;
			}
		}
		return $tdb;
	}
	
	function parseNode($node) {
		for ($i=0; $i < count($node); $i++) {
			$fe_user[$node[$i]["tag"]] = $node[$i]["value"];
		}
		return new PX_FrontEndUser($fe_user);
	}
	
	function updateRecord($record, $client) {

		$feusers = new cApiFrontendUserCollection;
		$feusers->resetQuery();
		$feusers->setWhere('syncid', $record->AdrId);
		$feusers->setWhere('idclient', '1');
		$feusers->query();
		$username = utf8_decode($record->AdrLogin);
		$password = trim(utf8_decode($record->AdrPW));
		$email = trim(utf8_decode($record->AdrEmail));

		if($feusers->count() > 0) {
		$feuser = $feusers->next();
		//	echo 'update: ' . $username . '<br>';
/**/
			

			//$feuser->set('username', str_replace($suchen1, $ersetzen1, $username));
			$feuser->set('username', $username);
			$feuser->set('password', $password);
			$feuser->set('email', $email);
			$feuser->set('password_clear', $password);

			$feuser->store();
		}
		else {
/*
			echo '<br>create: ' . $username . '<br>';
			echo $client . '<br>';
			echo $record->AdrId . '<br>';
			echo $email . '<br>';
			echo $password . '<br>';
*/
			$feuser = $feusers->create($username, $password);

			$feuser->set('idclient', '1');
			$feuser->set('active', true);
			$feuser->set('syncid', $record->AdrId);
			$feuser->set('email', $email);
			$feuser->set('password_clear', $password);
			$feuser->set('modified', date('Y-m-d H:i:s'), false);

			$feuser->store();

			$fegroups = new cApiFrontendGroupCollection;
			$fegroups->select("idclient = '1' AND defaultgroup='1'");
	
			$members = new cApiFrontendGroupMemberCollection;
				
			$iduser = $feuser->get("idfrontenduser");
				
			while ($fegroup = $fegroups->next()) {
				$idgroup = $fegroup->get("idfrontendgroup");
				
				$members->create($idgroup, $iduser);
			}
		}
	}

	$client = '1';
	$upload_dir = '../../upload/';
	$xml_file = $upload_dir . 'login.xml';

	if (file_exists($xml_file)) {
		$xml_db = readDatabase($xml_file);
		
		$synchdate = date("Y-m-d H:i:s");
	
		foreach($xml_db as $fe_user) {
			updateRecord($fe_user, $client);
		}

		$old_fe_users = new cApiFrontendUserCollection;
		$old_fe_users->resetQuery();
		$old_fe_users->select('idclient = ' . $client . ' AND modified < \'' . $synchdate . '\' AND syncid <> \'\'');

		while($old_fe_user = $old_fe_users->next()) {
			$old_fe_users->delete($old_fe_user->get('idfrontenduser'));
		}
	} 
}
?>
Contenido 4.8.20 | Contenido 4.9.12
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Problem Cronjobs Plugin

Beitrag von derju »

Bis jetzt konnte ich das Problem leider nicht lösen.

Der Crontab wird ausgelöst, und auch geloggt doch das updateRecord bzw. create wird nicht ausgeführt.
Wenn ich den Cronjob in der 4.9.8 via Administration/Cronjobs ausführe funktioniert es wunderbar.

Vielleicht fällt jemandem noch was auf?

LG - derJu
Contenido 4.8.20 | Contenido 4.9.12
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Problem Cronjobs Plugin

Beitrag von homtata »

Was deinen Code angeht, kann ich dir erstmal nicht helfen - ich denke, es ist einfach sicherer, du packst den gewünschten Code in ein normales Modul, wo das ganze Framework zum Testen bereitsteht, und nimmst dir einen kostenfreien Cronjob-Anbieter hinzu, wo du dann das Modul/den Artikel zeitgesteuert aufrufen lässt. Ich habs irgendwann aufgegeben mit den Pseudocronjobs, weil es einfach zu unzuverlässig war für das, was ich brauche.
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Problem Cronjobs Plugin

Beitrag von derju »

Danke, so läuft's!

LG - derJu
Contenido 4.8.20 | Contenido 4.9.12
Antworten