AdminTool Cron führt skript nicht aus

Status
Für weitere Antworten geschlossen.

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich habe ein kleines Problem mit den Crons.

Habe mit dem Tool einen Cron erstellt der zu jeder vollen Stunde das Script ausführen soll.

Unter Command steht

/volume1/web/import/imports.php

In diesem php Skript wierd eine txt Datei zerlegt und anschließend per mysql in die Datenbank geschrieben und anschließend das Textfile gelöscht.

Habe ich hier etwas falsch angegeben oder worin liegt mein Fehler?

Danke
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Es ist immer besser, einen Screenshot anzuhängen, denn so ist es eher ein Glücksspiel, den Fehler zu finden. Ich vermute, dass du vergessen hast, den php mit in die Zeile zu schreiben und dich darauf verlässt, dass der irgendwie schon durch die Dateiendung gefunden wird.

Also entweder: /usr/bin/php /volume1/web/import/imports.php

oder per Shebang in der erste Zeile des Skriptes probieren: #!/usr/bin/php

Itari
 

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
oh danke.
Dein Erster Tipp war Gold Wert.

Jetzt sehe ich in dem Log, dass er das File ausführt.
Aber leider habe ich auch php warnings.

PHP Warning: fopen(): open_basedir restriction in effect. File(imports.txt) is not within the allowed path(s): (/etc.defaults:/usr/bin/php:/usr/syno/synoman:/etc:/var/run:/tmp:/var/spool/php:/volume1/@tmp/php:/var/services/web:/var/services/photo:/var/services/blog:/var/services/homes) in /volume1/web/import/imports.php on line 12
PHP Warning: fopen(imports.txt): failed to open stream: Operation not permitted in /volume1/web/import/imports.php on line 12

Und hier nochmals der Abschnitt vom php Code.

$file = "imports.txt";
$fp = fopen($file, "r");
$data = fread($fp, filesize($file));
fclose($fp);

Dass heißt also ich muss meine File wo anderst ablegen?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Zwar gehört das Thema 'open_basedir' nicht mehr in dieses Forum und du findest im Unterforum 'Webserver' dazu eine Menge Beiträge, aber trotzdem hier einen Tipp dazu: Im DSM gibt es die Möglichkeit, die Einstellung von 'open_basedir' zu modifizieren. Entweder du löschst alles ganz raus (das geht dann immer) oder due ergänzt den Pfad noch um dein Verzeichnis ... dabei ist es wichtig, zu verstehen, dass PHP nicht die wirklichen Pfade hier versteht (mit Link usw.) sondern schlicht eine textuelle Mustererkennung durchführt ... mehr dazu findest im PHP-Handbuch ganz versteckt unter der Beschreibung dieser Einstellungsvariablen.

Itari
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Aber leider bekomme ich jetzt immer noch einen php Warning.

Kann es sein, dass du Sonderzeichen oder Umlaute im Dateinamen hast??? Und ja, fast 30% einen PHP-Programms, welches sich mit Dateien beschäftigt, ist Zeichensatzkonvertiererei ... sehr lästig, aber nur 'ohne' zu vermeiden.

Itari
 

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
Nein es sind keine Sonderzeichen im Dateinamen vorhanden.

Importiert soll nur eine Textdatei werden.
Diese heiß immer "imports.txt"

Nachtrag:
In der ersten Zeile der Txt Datei sind Sonderzeichen gestanden.
Diese habe ich jetzt Manuelle gelöscht.

Danach hatte ich folgende Meldung im Log.

crond: user root: parse error at 25
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
dann ist dein cronjob irgendwie fehlerhaft aufgesetzt. Hast du beachtet, dass bei Cronjobs via cron der Firmware Tabs als Trennzeichen verwendet werden müssen?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Ich hätte genauer lesen müssen ...

Die Fehlermeldung geht nicht auf eine 'lokale' Datei, sondern auf eine Web-URL (http://localhost/import/imports.txt) ... besser wäre, wenn die Datei per Pfad (/volume1/web/import/imports.txt) für den filesize() angesprochen werden würde ...

Itari
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Verwende einfach file() oder file_get_contents(), dann geht es auch ohne filesize() und damit auch via URL
 

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
@Itari:

Wenn ich die Datei mit dem Pfad angebe erhalten ich folgendes im Log.

PHP Warning: fopen(volume1/web/import/imports.txt): failed to open stream: No such file or directory in /volume1/web/import/imports.php on line 12

Ich vermute hier wird der Pfad nicht richtig übergeben, da er ja bei Line 11 keinen Fehler bringt.

@jahlives

Auch hier erhalte ich folgende Fehlermeldung.
Egal mit welcher von deinen Vorschlägen.

PHP Warning: fread() expects parameter 2 to be long, string given in /volume1/web/import/imports.php on line 13

Hier nochmals der php Code so wie er Anfangs war.

Line11$file = "volume1/web/import/imports.txt";
Line12:$fp = fopen($file, "r");
Line13:$data = fread($fp, filesize($file));
Line14:fclose($fp);
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Dann hast du meine Vorschläge nicht korrekt umgesetzt... Mal ins Manual geguckt was der Unterschied zwischen den beiden Fkt ist und was sie machen? bei meinen Voschlägen hat fread nichts mehr zu tun
Und dein Pfad im Skript ist so nicht korrekt. Ichgarantier dir, dass das File bei dir ned dort liegt
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Irgendwie fehlt da noch der Schrägstrich am Anfang des Pfades ...

Itari
 

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
@ Jahlives:

Jetz hab ichs hinbekommen mit dem Import. :)
Alle Daten sind korrekt eingetragen.

Da du aber vorher gesagt hast, dass meine File garantiert nicht dort lieg.
Wo liegt es den dann?

@Itari:

Auch der fehlende Schrägstrich hat leider nicht zum Ergebnis geführt, bekomme immer noch diese Fehlermeldung.
PHP Warning: fopen(volume1/web/import/imports.txt): failed to open stream: No such file or directory in /volume1/web/import/imports.php on line 12
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Auch der fehlende Schrägstrich hat leider nicht zum Ergebnis geführt, bekomme immer noch diese Fehlermeldung.
PHP Warning: fopen(volume1/web/import/imports.txt): failed to open stream: No such file or directory in /volume1/web/import/imports.php on line 12
der Schrägstrich fehlt in der Fehlermeldung immer noch. Das meinte ich mit dein File liegt dort garantiert ned, weil dieser Pfad so ned existiert auf deiner DS.
Zum Thema file und file_get_contents: Wenn du immer noch einen Fehler mit fread bekommen hast, dann hast du meinen Vorschlag ned verstanden oder nicht umgesetzt. Bei file und file_get_contents brauchst du kein fread mehr :)
 

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
Deswegen habe ich ja geschrieben.
Es hat funktioniert. ;)

Daten wurden korrekt vom Textfile gelesen und in die DB import.

Mich hat nur interessehalber interessiert wo ich nach dem File suchen soll.

Ich würde gerne Variante 2 auch zum Laufen bringen. :)
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
siehst du den Unterschied? ;-)
PHP Warning: fopen(volume1/web/import/imports.txt): failed to open stream: No such file or directory in /volume1/web/import/imports.php on line 12
Und welche Variante 2 meinst du konkret?
 

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
Ja klar des Schrägstrich fehlt.

Aber auch mit dem Schrägstrich bekomme ich den Fehler.

Deine Variante funktioniert ja mit einer URL.

Die Zweite Variante funktioniert mit lokalen Angaben.
Hoffe es ist verständlich was ich damit meine.

Auch wenn ich den Schrägstrich mache bekomme ich die Fehlermeldung..
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Welche Fehlermeldung meinst du jetzt genau? Die wegen dem falschen Pfad kanns ja ned sein, wenn du den / gemacht hast
 

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
okayy....

Jetz wirds peinlich ^^

Jetz gehts aufeinmal ohne Probleme...
komisch.

Die Daten sind korrekt in der DB enthalten und auch keine Fehlermeldungen, dass er die Datei nicht findet.



Am Ende habe ich eine unlink funktion stehen die mir das txt file löschen soll.

Nachdem der Cron fertig ist, ist die Datei auch weg, aber es steht trotzdem geschätze 100 mal folgende Meldung im Log.

PHP Warning: unlink(/volume1/web/import/importd.txt): No such file or directory in /volume1/web/import/importd.php on line 61
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat