SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 04.10.2012, 11:36:44
magast magast ist offline
Anfänger
 
Registriert seit: Jan 2007
Beiträge: 4
Problem mit Skript aus CRON

Hallo zusammen,
vielleicht hat hier jemand bereits das selbe Problem gehabt.
Kurz zur Beschreibung:

Ich führe ein PHP-Skript zur Übernahme von Daten aus einem ORACLE-Server in eine MySQL-DB aus. Dabei tritt folgendes Problem auf:
Obwohl das Skript durchläuft, werden nicht alle Daten übernommen. Führe ich das Skript von der Shell, unter dem selben benutzer ( root ) aus, werden alle Datensätze verarbeitet.

In beiden Fällen wird keine Fehlermeldung ausgegeben ( E_ALL ), es fehle einfach Daten, wenn über CRON ausgeführt.

Vielleicht gibt es einen Ansatz zur Lösung des Problemes.

Vorerst Danke.
Mit Zitat antworten
  #2  
Alt 04.10.2012, 12:56:00
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: Problem mit Skript aus CRON

Hi,

Zitat:
Obwohl das Skript durchläuft
Laufzeit beider Scripte identisch?
Zitat:
es fehle einfach Daten,
Wieviele von wievielen?
Zitat:
unter dem selben benutzer ( root )
Sicher? Hab schon viele Server erlebt die Crons nicht
als root ausführen.

Gern darfst du auszüge des Crons zeigen.

mfg

CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #3  
Alt 04.10.2012, 15:11:39
magast magast ist offline
Anfänger
 
Registriert seit: Jan 2007
Beiträge: 4
AW: Problem mit Skript aus CRON

Hallo,
die Laufzeit beider Skripts ist identisch.
Es fehlen ca. 2/3 der Daten, die importiert werden sollen. ein Fehler lässt sich nicht feststellen.

und ...

der Benutzer ist sicher 'root' .

Mir ist das Ganze ein Rätsel, zumal das Skript bis vor ein paar Tagen noch funktioniert hat. Die einzige Änderung seit dem ist die Anzahl der Daten, die importiert werden. Wobei das Problem nicht nur bei den 'neuen' Datensätzen auftritt sondern sich auf allen Datensätze auswirkt.

Klingt komisch -- ist es auch ;-)
Mit Zitat antworten
  #4  
Alt 04.10.2012, 17:58:53
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Problem mit Skript aus CRON

Zitat:
Zitat von magast Beitrag anzeigen
Vielleicht gibt es einen Ansatz zur Lösung des Problemes.
1. wie sieht das Script incl. shebang Zeile und OHNE Logindaten aus?
2. wie wird das CLI (?) Script aufgerufen? Bitte die komplette Zeile aus dem crontab.
3. welche PHP Version?
4. welche Config verwendet das Script?
Mit Zitat antworten
  #5  
Alt 05.10.2012, 09:10:49
magast magast ist offline
Anfänger
 
Registriert seit: Jan 2007
Beiträge: 4
AW: Problem mit Skript aus CRON

Guten Morgen,
vielen Dank für den Hilfeversuch.
Hier dei benötigten Informationen:

PHP-Version:
Code:
PHP 5.2.4 (cli) (built: Oct 16 2007 09:21:24)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
    with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies
    with Zend Optimizer v3.3.0, Copyright (c) 1998-2007, by Zend Technologies
Cron-Zeile: ( wird manuell genau so verwendet )
Code:
0 5 * * 1-5 /usr/bin/php -f /xxxx/xxxx/www/htdocs/intranet/components/com_adlmischrez/rez_import.php > /tmp/rezimport.log
Config (ausserhalb der PHP.ini):
Code:
error_reporting(E_ALL);
ini_set('display_errors', 'Off');
ini_set('log_errors', 'On');
ini_set('error_log', '/var/log/phperrors.log');
// Speichergrenze erhöhen
ini_set("memory_limit", "60M");
Im Skript selbst werden dann nur DB-Zugriffe ausgeführt. Tabelleninhlate werden zuerst gelöscht und dann komplett neu mittels INSERT eingefügt. Als DB-Schnittstelle wird PEAR-DB verwendet.

Da die Datensätze in den beiden Tabellen unterschiedliche Strukturen aufweisen, mehrere Datensätze in der Quell-Tabelle bilden einen Datensatz in der Zieltabelle, arbeite ich mit einem Array, das befüllt wird und bei Änderung eines bestimmten Kriteriums per INSERT in die Zieltabelle übergeben wird.

Vielleicht liegt hier der Fehler. Wie gesagt tritt der Fehler erst seit der Erhöhung der Anzahl der Datensätze in der Quelltabelle auf.

Ich suche weiter.
Mit Zitat antworten
  #6  
Alt 05.10.2012, 10:42:33
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: Problem mit Skript aus CRON

Hi

Zitat:
arbeite ich mit einem Array, das befüllt wird und bei Änderung eines bestimmten Kriteriums per INSERT in die Zieltabelle übergeben wird
Denke hier wird auch dein Fehler liegen. Aber ohne Code können wir dir
da nicht helfen.

mfg

CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #7  
Alt 05.10.2012, 12:25:53
magast magast ist offline
Anfänger
 
Registriert seit: Jan 2007
Beiträge: 4
AW: Problem mit Skript aus CRON

Hi
Hier ist jetzt der Code:
Zumindest der, der die Verabeitung macht.

Code:
	foreach($result as $key => $value){
		$sachnummer = $value['REZEPT'];
		if($value['MENGE'] == 0){
			continue;
		}
		if($sachnummer != $aktsachnummer){
			if(isset($fields)){
				$insertsql = "insert into jos_adlmischrez set id = ".$rezcounter."," .
						"artikeltyp = '".$fields['artikeltyp']."', " .
						"sachnummer = '".$fields['sachnummer']."', " .
						"teilnr = '".mysql_escape_string($fields['rezeptbezeichnung'])."', " .
						"subnr1 = '".$fields['subnr1']."', " .
						"subbez1 = '".$fields['subbez1']."', " .
						"mng1 = '".$fields['mng1']."', " .
						"subnr2 = '".$fields['subnr2']."', " .
						"subbez2 = '".$fields['subbez2']."', " .
						"mng2 = '".$fields['mng2']."', " .
						"subnr3 = '".$fields['subnr3']."', " .
						"subbez3 = '".$fields['subbez3']."', " .
						"mng3 = '".$fields['mng3']."', " .
						"subnr4 = '".$fields['subnr4']."', " .
						"subbez4 = '".$fields['subbez4']."', " .
						"mng4 = '".$fields['mng4']."', " .
						"subnr5 = '".$fields['subnr5']."', " .
						"subbez5 = '".$fields['subbez5']."', " .
						"mng5 = '".$fields['mng5']."', " .
						"subnr6 = '".$fields['subnr6']."', " .
						"subbez6 = '".$fields['subbez6']."', " .
						"mng6 = '".$fields['mng6']."', " .
						"subnr7 = '".$fields['subnr7']."', " .
						"subbez7 = '".$fields['subbez7']."', " .
						"mng7 = '".$fields['mng7']."', " .
						"subnr8 = '".$fields['subnr8']."', " .
						"subbez8 = '".$fields['subbez8']."', " .
						"mng8 = '".$fields['mng8']."', " .
						"subnr9 = '".$fields['subnr9']."', " .
						"subbez9 = '".$fields['subbez9']."', " .
						"mng9 = '".$fields['mng9']."', " .
						"subnr10 = '".$fields['subnr10']."', " .
						"subbez10 = '".$fields['subbez10']."', " .
						"mng10 = '".$fields['mng10']."'";
				// if ($debug) print $fields['sachnummer']." ->>- ".$fields['rezeptbezeichnung']."\n";
				if($debug) print_r($fields)."\n";
				$mysql->query($insertsql);
			}
			$fields = array();
			$fields = array('sachnummer' => '', 'artikeltyp' => '', 'rezeptbezeichnung' => '', 'subnr1' => '', 'subbez1' => '', 'mng1' => '', 'subnr2' => '', 'subbez2' => '', 'mng2' => '',  'subnr3' => '', 'subbez3' => '', 'mng3' => '', 'subnr4' => '', 'subbez4' => '', 'mng4' => '', 'subnr5' => '', 'subbez5' => '', 'mng5' => '', 'subnr6' => '', 'subbez6' => '', 'mng6' => '', 'subnr7' => '', 'subbez7' => '', 'mng7' => '', 'subnr8' => '', 'subbez8' => '', 'mng8' => '', 'subnr9' => '', 'subbez9' => '', 'mng9' => '', 'subnr10' => '', 'subbez10' => '', 'mng10' => '');
			$fields['sachnummer'] = $sachnummer;
			$fieldcounter = 1;
			$rezcounter++;
			$aktsachnummer = $sachnummer;
		}
		else {
			$fieldcounter++;
		}
		$artikelpart = explode(' ',$value['REZEPTBEZ1']);
		switch($artikelpart[0]){
			case 'XXXXX':
				$artikeltyp = 'XXXXRYL';
				break;
			case 'XXXXXXXX.':
				$artikeltyp = 'XXXXXLACK';
				break;
			default:
				$artikeltyp = $artikelpart[0];
		}
		$fields['artikeltyp'] = $artikeltyp;
		$teilnr = reducestring($value['REZEPTBEZ1'], 'teilenr');

		if(trim($value['REZEPTBEZ2']) != ''){
			$teilnr .= " | ".$value['REZEPTBEZ2'];
		}
		$teilnr = iconv( "UTF-8", "ISO-8859-1",$teilnr);
		$fields['rezeptbezeichnung'] = $teilnr;
		$fields['subnr'.$fieldcounter] = $value['TEILENR'];
		$subbez = iconv( "UTF-8", "ISO-8859-1",reducestring($value['TEILEBEZ1'], 'teilenr'));
		$fields['subbez'.$fieldcounter] = $subbez;
		$fields['mng'.$fieldcounter] = strtr($value['MENGE'],',','.');
	}
Mit Zitat antworten
  #8  
Alt 05.10.2012, 15:03:18
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Problem mit Skript aus CRON

Zitat:
Zitat von magast Beitrag anzeigen
PHP-Version:
Code:
PHP 5.2.4 (cli) (built: Oct 16 2007 09:21:24)
Älter als die Steinkohle.

Zitat:
Cron-Zeile: ( wird manuell genau so verwendet )
Code:
0 5 * * 1-5 /usr/bin/php -f /xxxx/xxxx/www/htdocs/intranet/components/com_adlmischrez/rez_import.php > /tmp/rezimport.log
Ungünstig. Ich hatte gedacht, es wäre ein direkter Eintrag in /etc/crontab, der den Usernamen beinhaltet, mit dessen Rechten das Script ausgeführt werden soll. Beispiel:
Code:
* * * * * root /irgendwo/irgendwas >/dev/null 2>&1
Noch ungünstiger ist, daß es kein direkt ausführbares CLI Shellscript ist, weil es kein execute Flag hat und keine shebangzeile. Beispiel:
Code:
#!/usr/bin/php -c /etc/php5/cli/root.ini -q 
<?php
Wichtig ist, daß nach dem -q ein Leerzeichen und ein Linux-Zeilenumbruch folgt. Wird das nicht beachtet, kommt "bad interpreter". Ich tippere deshalb die shebang Zeile immer mit dem MC in der Linuxshell. Spart wilde Flüche.

Zitat:
Config (ausserhalb der PHP.ini):
Für sowas verwendet man eine separate php.ini, welche das enthält, was man benötigt. Spart unnötige ini_set im Script.

Zitat:
Im Skript selbst
Generelle Frage: wird include oder require verwendet? Gibt Probleme, weil das Arbeitsverzeichnis anders ist als beim "normalen Webserverscript".

Zitat:
Wie gesagt tritt der Fehler erst seit der Erhöhung der Anzahl der Datensätze in der Quelltabelle auf.
Da fehlt also Scriptspeicher, den der root locker kriegt. Wird das Script aber nicht vom root ausgeführt, fehlt das Recht dazu.

Ggf. solltest Du auch mal an eine sequenzielle Verwurstung der Datensätze denken:
- hole einen Record von Oracle
- mach was damit
- und per INSERT oder REPLACE nach MySQL
Spart Speicher, weil nur ein einsamer Datensatz bearbeitet wird.

Falls Du Zugriff auf den Oracle Server hast (und die Kenntnisse dazu):
Oracle bietet eine interne Programmiersprache: http://de.wikipedia.org/wiki/PL/SQL
Damit kannste einige Feinheiten erledigen, die Dir tonnenweise PHP ersparen.

MySQL 5 kann nur eine Untermenge davon. PostgreSQL wäre besser geeignet, weil es PL/pgSQL anbietet.
Mit Zitat antworten
  #9  
Alt 18.01.2013, 11:56:18
rei rei ist offline
Anfänger
 
Registriert seit: Sep 2010
Ort: Sünching bei Straubing - Regenburg
Alter: 51
Beiträge: 17
Menge in $result beachten

Hallo,

beachte unbedingt die Tipps von meikel, damit Dein Scipt auch als ShellScript richtig läuft.

Desweiteren noch ein Tipp:
Bei richtig vielen DB-Einträgen kann dir php 'ein paar' Einträge 'verschlucken',
deshalb:
1.) prüfe die Anzahl der Einträge in der DB (mysql>SELECT COUNT(*)...)
mit den Einträgen in $result(php>...count($result)...)
2.) als Lösung:
verarbeite die Einträge 'häppchenweise' (z.B. limit auf 500,10000,20000 Einträge) wie mySQLDumper und Co.
__________________
Meine Tochter: kleine Frau ganz gross

Reinhard Neidl Webprogrammierung
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Komplexes SQL Problem Oliabt MySQLi/PDO/(MySQL) 2 21.11.2007 11:01:21
Startup Skript m_haussner MySQLi/PDO/(MySQL) 0 10.10.2007 18:17:18
Download Skript problem Infinity PHP Grundlagen 2 31.12.2006 13:00:29
Problem PHP Send Mail bei gewissen Empfängerdomains 030 PHP Grundlagen 0 26.04.2004 21:41:13
Problem mit skript! burningDragon PHP für Fortgeschrittene und Experten 1 28.03.2004 18:03:20


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:36:08 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt