Ein PHP-Skript per Cronjob regelmäßig ausführen lassen

Status
Für weitere Antworten geschlossen.

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
13.741
Punkte für Reaktionen
3.722
Punkte
468
Der Aufgabenplaner kann Scripte/Programme zyklisch ausführen - damit hat es sich dann aber auch schon.
In welcher Sprache die Programme/Scripte geschrieben sind, ist einzig und allein Sache des Erstellers. Auf jeden Fall sollte man seine Scripte über die Konsole erstmal ausgiebig testen, bevor man sie dem Aufgabenplaner zur zyklischen Ausführung übergibt.
 

Stefan!

Benutzer
Mitglied seit
21. Dez 2013
Beiträge
65
Punkte für Reaktionen
0
Punkte
6
Auf jeden Fall sollte man seine Scripte über die Konsole erstmal ausgiebig testen, bevor man sie dem Aufgabenplaner zur zyklischen Ausführung übergibt.

das klingt vernünftig ABER
das script funktioniert ja, wenn man dieses vom BROWSER aus aufruft.
Es soll die Möglichkeit geben
a) Aufruf über Browser --> das klappt
b) zusätzlich automatisiert z.B. 1 x am Tag .... über den Aufgabenplaner

ich bleibe dran ... werde mich mit der console befassen ...
Danke für die Hinweise/Anregungen/Infos!
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.662
Punkte für Reaktionen
1.560
Punkte
314
Also... ich hab mir das mal angeschaut und folgende Lösung für dich erarbeitet. Ich fange dabei mal ganz von vorne an.

Erstell dir über die FileStation oder besser noch auf der Konsole der DS eine neue Text-Datei, fülle diese mit nachfolgendem Inhalt und speicher alles z.B. unter /volume1/web/get100.php ab.

PHP:
#!/usr/bin/php
<?php

$doc = new DOMDocument(); 
  $doc->load('http://www.tagesschau.de/export/video-podcast/tagesschau-in-100-sekunden/'); 
  $arrFeeds = array(); 
  $cnt=0; 
  foreach ($doc->getElementsByTagName('item') as $node) { 
      if($cnt == 5 ) { 
       break; 
     }  
    $itemRSS = array (  
      'title' => $node->getElementsByTagName('title')->item(0)->nodeValue, 
      'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue, 
      'link' => $node->getElementsByTagName('link')->item(0)->nodeValue, 
      'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue, 
      'enclosure' => $node->getElementsByTagName('enclosure')->item(0)->getAttribute('url') 
      ); 
      $cnt++; 
}; 

$link = $itemRSS['enclosure']; 
exec("wget -O 100.mp4 $link"); 

?>

Wichtig ist hierbei die letzte Zeile, denn hier wird u.a. der Speicherort für die Datei 100.mp4 angegeben. Gibts du hier keinen genauen Speicherort an, dann wird der Download am aktuellen Speicherort des Scriptes abgelegt... zumindest, wenn du das Script über die Konsole bzw. über den Browser startest. Da du jedoch über den DSM-Aufgabenplaner gehst, wird der Download hier abgelegt /usr/syno/synoman/webapi/100.mp4, was dem System-Apachen entspricht. Das bedeutet, das das Script erstmal funktioniert, nur der Speicherort falsch ist. Ändern kannst du das, indem du die letzte Zeile im Script anpasst z.B. so..

PHP:
exec("wget -O /volume1/web/100.mp4 $link");

... was bewirkt, das die Datei 100.mp4 im Ordner /volume1/web abgelegt wird. Änder also hier den Pfad in deinen gewünschten.

Bevor du das Script jetzt jedoch ausführen kannst, musst du es noch ausführbar machen. Das geht am besten über die Konsole indem du dem Script die nötigen Berechtigungen erteilst und zwar mit...

Rich (BBCode):
chmod 755 /volume1/web/get100.php

Danach kannst du es mit...

Rich (BBCode):
php /volume1/web/get100.php

... aufrufen und ausführen. Sollte das klappen, kannst du letzteren Befehl im Aufgabenplaner verwenden um das Benutzerdefinierte Script als root auszuführen.

Ich hab das hier bei mir am Laufen uns so sollte es auch bei dir funktionieren.

Viel Spaß

Tommes
 
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