Seite 1 von 1

Problem Cronjobs Plugin

Verfasst: Do 16. Jul 2015, 07:07
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

Re: Problem Cronjobs Plugin

Verfasst: Do 16. Jul 2015, 09:13
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

Re: Problem Cronjobs Plugin

Verfasst: Do 16. Jul 2015, 12:18
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

Re: Problem Cronjobs Plugin

Verfasst: Do 16. Jul 2015, 12:51
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.

Re: Problem Cronjobs Plugin

Verfasst: Do 17. Sep 2015, 10:07
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

Re: Problem Cronjobs Plugin

Verfasst: Do 17. Sep 2015, 15:54
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

Re: Problem Cronjobs Plugin

Verfasst: Fr 18. Sep 2015, 07:23
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'));
		}
	} 
}
?>

Re: Problem Cronjobs Plugin

Verfasst: Fr 18. Sep 2015, 15:38
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

Re: Problem Cronjobs Plugin

Verfasst: Fr 18. Sep 2015, 16:40
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.

Re: Problem Cronjobs Plugin

Verfasst: Mo 21. Sep 2015, 15:46
von derju
Danke, so läuft's!

LG - derJu