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

Status
Für weitere Antworten geschlossen.

Atrix

Benutzer
Mitglied seit
26. Jan 2014
Beiträge
14
Punkte für Reaktionen
0
Punkte
1
Hallo Zusammen,

ich brauch eure Hilfe. Ich möchte gerne einmal in der Stunde die Tageschau in 100 Sekunden automatisch auf meine Synology herunterladen. Dies soll per Cronjob und mit einem PHP Skript passieren.

Das Skript ist folgendes:
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");


?>

Web Station habe ich Installiert und das Skript in den Ordner /volume1/web abgelegt. Crontab habe ich wie folgt bearbeitet:
Als Admin per SSH eingeloggt
cd /etc
sudo vi crontab

dann folgendes Hinzugefügt:
00 1 * * * root /usr/bin/php /volume1/web/get100.php

get100.php ist das oben aufgeführte PHP Skript. Ich kann das Skript mit folgendem Befehl ausführen:
/usr/bin/php /volume1/web/get100.php

Die Datei wird in meinen Home Ordner runtergeladen. Dies würde ich gerne ändern, weiß aber leider nicht wie. Die Datei soll in den Ordner /Volume1/music.
Auch wird die Datei nicht automatisch runtergeladen. Wie gesagt manuell funktioniert es:


/usr/bin/php /volume1/web/get100.php
--2017-09-24 14:16:49-- http://media.tagesschau.de/video/100s/2017/0924/TV-100s-1409.podm.h264.mp4
Resolving media.tagesschau.de... 104.80.93.230
Connecting to media.tagesschau.de|104.80.93.230|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4342985 (4.1M) [video/mp4]
Saving to: '100.mp4'

100%[======================================>] 4,342,985 833KB/s in 5.1s

2017-09-24 14:16:54 (832 KB/s) - '100.mp4' saved [4342985/4342985]

Danke für die Hilfe
Lg. Atrix
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
13.741
Punkte für Reaktionen
3.722
Punkte
468
Ich kenne mich mit php nicht aus, aber ich würde da noch ein Shell-Script dazwischen schalten, das ins richtige Verzeichnis wechselt und das in die crontab eintragen. Sowas in der Art:
Code:
#!/bin/sh
cd /volume1/music
/usr/bin/php /volume1/web/get100.php

Denk auch dran, dass bei cron-Jobs der Pfad nicht so sitzt wie bei interaktiven Login. Du machst z.B. ein wget ohne Pfad zu wget. Am besten, du übernimmst auch die Ausgabe von "echo $PATH" vom interaktiven Login als "PATH=...; export PATH" mit ins Shell-Script. Das zu vergessen ist ein häufig gemachter Fehler, wenn man Scripte per cron ausführt.
 
Zuletzt bearbeitet:

Atrix

Benutzer
Mitglied seit
26. Jan 2014
Beiträge
14
Punkte für Reaktionen
0
Punkte
1
Hallo Benares,

okay ich bin in dem Gebiet ein Anfänger :). Kannst du mir erklären was du genau meinst mit Shell-Script dazwischen schalten?

Ich erstelle mir ein Script mit:
Rich (BBCode):
#!/bin/sh
cd /volume1/music
/usr/bin/php /volume1/web/get100.php

dieses bewirkt dass in das Verzeichnis /volume1/music gewechselt wird. Danach wird das get100.php ausgeführt und Speichert die Datei in den Ordner /volume1/music?.

lg. Atrix
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
13.741
Punkte für Reaktionen
3.722
Punkte
468
Genau. Probier's aus. Kannst das Script ja z.B. "get100.sh" nennen und auch unter /volume1/web ablegen. "chmod 755 /volume1/web/get100.sh" nicht vergessen, um es ausführbar zu machen.
In die /etc/crontab kommt dann nur z.B. "00 1 * * * root /volume1/web/get100.sh" oder besser "00 1 * * * root /volume1/web/get100.sh >/tmp/get100.log 2>&1" rein, damit du auch siehst was/wann passiert.

Das mit dem Pfad hast du verstanden?
also z.B.
Code:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
export PATH
cd /volume1/music
/usr/bin/php /volume1/web/get100.php
 
Zuletzt bearbeitet:

Atrix

Benutzer
Mitglied seit
26. Jan 2014
Beiträge
14
Punkte für Reaktionen
0
Punkte
1
Perfekt so funktioniert es! Also habe das SH Skript manuell ausgeführt und er speichert die Datei jetzt wie gewollt unter Music. Jetzt muss ich nur noch schauen ob er es jede Stunde automatisch macht. Gibt es da irgendwie ein Protokoll oder sowas wo man sehen kann ob er es ausgeführt hat?

Lg. Atrix
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.662
Punkte für Reaktionen
1.560
Punkte
314
Benares hat dir bereits gezeigt, wie es geht...

...oder besser "00 1 * * * root /volume1/web/get100.sh >/tmp/get100.log 2>&1" rein, damit du auch siehst was/wann passiert.

... denn mit dem Anhang >/tmp/get100.log 2>&1 wird dir im Ordner /tmp eine Datei Namens get100.log erstellt, dessen Inhalt du dir mit jedem beliebigen Editor (vi, nano, mcedit etc.) anschauen kannst.

Der richtige Cron-Eintrag, um täglich zur jeden vollen Stunde das Script auszuführen müsste so lauten...

0 0-23/1 * * 1,2,3,4,5,6,0

... um das Script am Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag in der Zeit von 00:00 Uhr bis 23:00 Uhr, stündlich auszuführen.

Tommes
 

Atrix

Benutzer
Mitglied seit
26. Jan 2014
Beiträge
14
Punkte für Reaktionen
0
Punkte
1
Hallo Tommes,

danke für deine Antwort. Jetzt habe ich es auch verstanden :) Danke auch für die Erklärung mit der Zusammensetzung der Zeit. Habe es jetzt so eingetragen und gespeichert:
0 0-23/1 * * 1,2,3,4,5,6,0 root /volume1/web/get100.sh >/tmp/get100.log 2>&1

Lg. Atrix
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.662
Punkte für Reaktionen
1.560
Punkte
314
Kein Problem. Wir profitieren hier ja alle Gegenseitig von unserem Wissen. Ich finde nämlich deinen PHP-Schnipsel ziemlich spannend... vielleicht kann ich das irgendwann mal gebrauchen.

Im hiesigen Wiki findest du auch eine Beschreibung zum CRON *klick*

Tommes
 

Atrix

Benutzer
Mitglied seit
26. Jan 2014
Beiträge
14
Punkte für Reaktionen
0
Punkte
1
Ja ich habe heute wieder viel gelernt :) Ich nutze dies in Kombination mit meinen Sonos Lautsprechern. Wenn ich morgens ins Bad gehe z.B wird dies dann automatisch abgespielt.

Atrix
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.662
Punkte für Reaktionen
1.560
Punkte
314
Wenn ich morgens ins Bad gehe bin ich noch nicht fähig komplexere Aufgaben zu erledigen, geschweige denn mich auf die Nachrichten zu konzentrieren. Mein Körper befindet sich zu diesem Zeitpunkt noch im Modus "Autopilot"
 

AndiHeitzer

Benutzer
Sehr erfahren
Mitglied seit
30. Jun 2015
Beiträge
3.324
Punkte für Reaktionen
614
Punkte
174
Mein Körper befindet sich zu diesem Zeitpunkt noch im Modus "Autopilot"

Waaaahahahaha :D

YMMD

Rich (BBCode):
  _________________
/    _             \
|  ( ((            |
|   \ =\           |
|  __\_ `--.       |
| (____))(  \----- |
| (____))  _       |
| (____))          |
| (____))____/---- |
\ _________________/
 

Stefan!

Benutzer
Mitglied seit
21. Dez 2013
Beiträge
65
Punkte für Reaktionen
0
Punkte
6
kann man ein PHP-SCRIPT auch über
SYSTEMSTEUERUNG + AUFGABENPLANER automatisch starten (Intervall kann man ja dort einstellen)

s3.jpgs2.jpg
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.662
Punkte für Reaktionen
1.560
Punkte
314
Probier’s aus
 

Stefan!

Benutzer
Mitglied seit
21. Dez 2013
Beiträge
65
Punkte für Reaktionen
0
Punkte
6
und wie mache ich der Diskstation klar, daß die Aufgabe ein PHP-script ist?
Wenn ich das selbe script mir dem Brower starte, funktioniert das script
per AUFGABE leider nicht?
Danke für einen Hinweis!

s4.jpg


Rückmeldung per eMail
Sehr geehrter Benutzer,

Aufgabenplaner hat eine geplante Aufgabe abgeschlossen.

Aufgabe: Task 8
Startzeit: Mon, 02 Oct 2017 10:20:12 GMT
Stoppzeit: Mon, 02 Oct 2017 10:20:12 GMT
Aktueller Status: 2
Standardausgabe/Fehler:
/volume1/web/Ku/index.php: line 1: ?php: No such file or directory
/volume1/web/Ku/index.php: line 2: $'\r': command not found
/volume1/web/Ku/index.php: line 3: syntax error near unexpected token `$conn,'
/volume1/web/Ku/index.php: line 3: `function TabelleAnlegen( $conn, $TabelleName) {
'


Mit freundlichen Grüßen
Synology DiskStation


index.php
<?php

function TabelleAnlegen( $conn, $TabelleName) {

$sql1 = "CREATE TABLE ";
$sql1 .= $TabelleName;
$sql1 .= " (id INT, Datum DATE, Uhrzeit CHAR)";

ECHO $sql1;
$conn->query($sql1);
}
...
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
13.741
Punkte für Reaktionen
3.722
Punkte
468
Entweder der "Befehl" lautet "/bin/php /volume1/web/Ku/index.php" oder du probierst es mal mit
Code:
#!/bin/php
<?php
...
im Kopf des Scripts. Der "Shebang" (#!/bin/irgendwas) hilft der Shell den richtigen Script-Interpreter zu verwenden. Im Gegensatz zu DOS/Windows ist die Extension des Scripts (.php) ganz egal. Linux macht das ganz allein an den Ausführungsrechten (x) der Datei fest.
 

Stefan!

Benutzer
Mitglied seit
21. Dez 2013
Beiträge
65
Punkte für Reaktionen
0
Punkte
6
Danke für die Rückmeldung!
Die Richtung stimmt ... allerdings kommt im Gegensatz zu dem Aufruf der Datei index.php durch den Browser eine Fehlermeldung:

Sehr geehrter Benutzer,
Aufgabenplaner hat eine geplante Aufgabe abgeschlossen.
Aufgabe: Task 8
Startzeit: Mon, 02 Oct 2017 13:42:04 GMT
Stoppzeit: Mon, 02 Oct 2017 13:42:04 GMT
Aktueller Status: 255
Standardausgabe/Fehler:
PHP Fatal error: Class 'mysqli' not found in /volume1/web/Ku/index.php on line 70
Fatal error: Class 'mysqli' not found in /volume1/web/Ku/index.php on line 70

da steckt diese Zeile dahinter:
$conn = new mysqli($dbhost, $dbuser, $dbpass, $datenbank); // Zeile 70 funktioniert bei Aufruf über Opera


Hinweis:
mysqli sind bei PHP 5.6 und bei PHP 7.0 aktiviert
s6.jpg
s7.jpg
 
Zuletzt bearbeitet:

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
13.741
Punkte für Reaktionen
3.722
Punkte
468
Kommt die Fehlermeldung auch, wenn du das Script von der Shell aus aufrufst? Die Einstellungen in den Screenshots betreffen ja die Webstation. Bei Aufruf über Shell oder Cron geht das ja komplett an der Webstation vorbei. Evtl. muss dafür im Script noch was angepasst werden. Ich selbst kenne mich mit php überhaupt nicht aus.
 

Stefan!

Benutzer
Mitglied seit
21. Dez 2013
Beiträge
65
Punkte für Reaktionen
0
Punkte
6
Kommt die Fehlermeldung auch, wenn du das Script von der Shell aus aufrufst?

keine Ahnung wie das geht .. da muß ich mich erst mir befassen,. Da benötige ich vermutlich telnet/putty o.ä. ... war noch nie auf der shell der DS.


Bei Aufruf über Shell oder Cron geht das ja komplett an der Webstation vorbei.
ist das tatsächlich so? Kenne ich mich leider nicht mit aus.
Wenn ich statt Webstation XAMPP laufen lasse, funktioniert das script auch problemlos (auch über den Browser) ... nur sobald ich das script automatisiert von der DS aus gestartet aufrufe, kommt der Fehler. (nicht bei Aufruf über Browser und aktivierter webstation, deaktiviertem xampp)
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
13.741
Punkte für Reaktionen
3.722
Punkte
468
Da wird es aber mal Zeit. Ja, putty brauchst du dafür.
Evtl. musst du ja die zur Laufzeit benötigten Erweiterungen innerhalb des Scripts selbst nachladen. Lies mal z.B. hier.
 

Stefan!

Benutzer
Mitglied seit
21. Dez 2013
Beiträge
65
Punkte für Reaktionen
0
Punkte
6
Danke für die Rückmeldung und die Hinweise!

Da wird es aber mal Zeit. Ja, putty brauchst du dafür.
ich wollte eigentlich ungern irgend etwas auf/über shell-Ebene mittels telne/putty verstellen ...

Evtl. musst du ja die zur Laufzeit benötigten Erweiterungen innerhalb des Scripts selbst nachladen. Lies mal z.B. hier.

Wenn es schon einen Aufgabenplaner+Webstation gibt, wäre das doch klasse, wenn dieser ein PHP-SCRIPT problemlos ausführen könnte. Das mit dem Nachladen benötigter Erweiterungen klingt interessant ...
ich werde mal direkt bei Synology nachhaken ... und mich auch mit telnet/putty befassen.
Danke!
 
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