php skript per Cronjob geht nicht

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

P4ddy

Benutzer
Registriert
26. Okt. 2009
Beiträge
461
Reaktionspunkte
1
Punkte
16
Hallo und guten Morgen zusammen,

ich habe ein Problem mit dem webserver und cronjobs- ich hoffe das ich hier richtig bin :-)

Also folgendes: Ich habe ein php script, dass mir Daten von einem anderem Gerät im Netzwerk abholt und mir in eine SQL- Datenbank schreiben soll- das klappt auch.

Damit es das tut- muss ich das Skript zur Zeit im Webbroser manuell aufrufen. Nun wollte ich das Skript per Cronjob automatisch ausführen lassen und da hakt es!
Rufe ich das gleiche Script über telnet auf, so bekomme ich ein "Permission denied"- ich glaube daher, dass der Telnet- user "root" nicht die Rechte hat das Skript auszuführen und daher auch der Cronjob nicht läuft.

Kann das so sein oder hat root normalerweise ALLE!! Rechte?

Also wie gesagt: das Skript klappt bei Aufruf über einen Webbroser, aber über telnet gibts ein "permission denied"

Ich habe auch mir die Cronjob- Anleitung aus dem Syno- Wiki schon angeschaut und auch danach gearbeitet, aber weder als root noch ein Cronjob mit anderem Benutzer klappt.


die Einträge in Crontab sehen so aus:
*/5 * * * * root /Volume1/web/profilux/sql.php

bzw. der als anderer User
*/5 * * * * root /bin/su -c "/Volume1/web/profilux/sql.php" Patrick

Wobei Patrick in der DS als der Besitzer der Ordners profilux und allen Dateien darunter festgelegt ist.


Also ich hoffe das war verständlich so und ihr könnt mir helfen :-)

Danke und Gruß
Patrick
 
Shebang drin? (#!/...wo_auch_immer_php_liegt.../php)
Ausführbar? (chmod 700)
 
öhm.. wie bitte?
Sorry aber bin nicht gaaanz so firm:rolleyes:

wie genau führe ich das chmod aus? und was meinst du mit "Shebang drin?" muss ich einfach #! vor den Pfad zum script setzten im crontab?

danke
 
die "sheBang" Zeile ist die erste Zeile eines Scriptes und diese legt den Pfad zum Interpreter fest. In deinem Fall müsstest du den Pfad zum PHP Interpreter auf deiner DS angeben #!/path/to/php (den genauen Pfad findest du auf der DS deines Vertrauens)
 
die "sheBang" Zeile ist die erste Zeile eines Scriptes und diese legt den Pfad zum Interpreter fest. In deinem Fall müsstest du den Pfad zum PHP Interpreter auf deiner DS angeben #!/path/to/php (den genauen Pfad findest du auf der DS deines Vertrauens)

mh... muss ich das machen damit der cronjob geht oder damit das script als solches funktioniert? Weil ausführen über einen Webbroser kann ich es ja?
ich lese mir mal den Beitrag durch und wenn ich damit nicht klar komme hoffe ich ihr könnt mir nochmal helfen :-)
 
Ausführung von PHP via Webserver und direkt auf der Konsole (z.B. cron) sind zwei paar Schuhe. Via Webserver ist die shebang Zeile unnötig, weil dabei das Script vom PHP-Apache-Modul verarbeitet wird. Das "erkennt" der Webserver an der Dateiendung (.php). Die Konsole gibt aber nichts auf die Dateiendung und will immer genau wissen welcher Interpreter zu verwenden ist. Für die Kommandozeile gibt es einen PHP-Interpreter auf der DS und den Pfad dazu musst du in der Shebang Zeile angeben
 
Hallo,

also erstmal eine dickes Danke an euch- ihr habt mir sehr weiter geholfen, vor allem der Beitrag von jahlives.

Nach deinem Hinweis wegen des Interpreters habe ich mal danach gegooglet und bin auch einen anderen Beitrag hier gestoßen der mir geholfen hat. ich habe es nun nicht mit einem interpreter gelöst- sondern ein wget mit dem Pfad zu meiner PHP Datei in den Cronjob eingetragen. Läuft nun einwandfrei :-)

Vielen Dank.
 
Achtung!
Auf diese Weise läuft die System-Partition voll, die Weboberfläche der Synology startet dann nicht mehr (ja nach Umfang in 1 Monat oder mehr).
Einfache Abhilfe in dem Fall nur wenn SSH an ist und init3rd_party installiert ist (weil das ein Backup der dann kaputten apache-config hat)

Es muss daher per Cronjob folgendes regelmäßig laufen:
ls /root | xargs rm

Der Ausgabe-Pfad für wget dev/null hilft nicht.


Sofern die Cronjobs-Erweiterung installiert wurde, muss man nach Änderungen damit die Zeiten für das Netzwerk-Backup neu setzen (sofern Zeitgesteuertes Backup eingerichtet ist), das geht beim speichern verloren.
 
ls /root | xargs rm

und was ist mit meinen anderen Files in /root ;-)
Besser im Script das per cron aufgerufen vor dem wget ein cd in ein Verzeichnis machen, das auf einer Part liegt die genügend Platz hat
 
oh.. danke für die Hinweise... ich weiß- das ist keine sehr schöne Lösung- natürlich würde ich das lieber vernüftig machen als nun wieder irgendwo anders anfassen zu müssen.

Kann mir vll. einer von euch sagen wie die Sache mit einem php interpreter vernüftig funktioniert um ein php script per cronjob ausführen zu lassen?
das wäre dann ja perfekt und ich müsste nicht irgenwo anders wieder irgendwelche anderen fehler ausbaden...

Danke
 
ich kenn den Pfad zum PHP Interpreter auf der DS ned auswendig. Dürfte aber unterhalb von /usr/syno liegen, mach mal
Code:
find /usr/syno -name php
 
Hallo,
/usr/bin/php

Gruß Götz
 
So, also dann nochmal für mich:
In die erste Zeile meines Scriptes, noch vor <php, schreibe ich #!/usr/bin/php
Und dann schreibe ich in den cronjob einfach den Pfad zum php Script?

Wie ist das wenn ich Include? Ich habe eine connect.php die anmeldedaten für SQL Server und so weiter enthält, die von einer SQL.php aufgerufen wird- müssen alle über die Coonsole auszuführenden Scripte diese shebang enthalten, oder wird das durchgereicht?

Vielen dank für eure Gedult mit mir:) find ich Super

Gruß Patrick
 
/root/ ist normal leer, zumindest unter DSM 3
 
/root/ ist normal leer, zumindest unter DSM 3
du hast einfach nur Glück, dass profile eine versteckte Datei ist und damit von deinem ls ned erwischt wird. Ergo /root ist nicht leer :-)
 
Servus,

ich hoffe ich gebe mein Wissen zum besten. Ich stand vor wenigen Tagen als Neuling ebenfalls vor dem Problem eine regelmäßige Sicherung meiner DB anzulegen. Damit ich die *.php - Datei nicht immer händisch aufrufen musste bin ich nach etwas Recherche auf Cronjobs (www.cronjpbs.de) gestoßen die dann meine Rettung war. Mithilfe dessen lasse ich nun einfach wie man es eben einstellt die *.php - Datei aufrufen und ich muss mich um nichts mehr kümmern.

Ich hoffe ich habe dich richtig verstanden was Du wolltest und meine Beschreibung hilft dir es etwas einfacherer und nicht so hardwarenah die Idee zu realisieren.

Lieben Gruß,
Chris
 
Also ich habe es so gelöst.

In der Conrjob Zeile meine gewünschte Zeit eingestellt und der auszuführende Code ist

Rich (BBCode):
/usr/bin/php /Pfad_zur_php_Datei

Und damit führ er mir jeden Tag mein Script aus.

Ich habe allerdings noch einen eigenen Cron-Job angelegt der mir meine Daten von einem anderen Webserver abholt.

Dies habe ich wie vorher schon erwähnt in einem anderen Verzeichnis erledigt.

Einfach mit dem cd Befehl in das gewünschte Arbeitsverzeichnis gehen und dort das File ablegen.

zb:

Rich (BBCode):
cd /volume1/web
und dahinter der wget Befehl zb.


Damit holt er mir einmal am Tag das File vom gewünschten Server ab und legt es ins Webverzeichnis wo genügend Speicherplatz is.

Habs jetzt alles ausn Kopf getippt und habe mich hoffentlich nirgends vertan. :)
 
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