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

In aller Kürze:

  1. Auf der Diskstation den SSH-Dienst aktivieren:
    Systemsteuerung => Terminal & SNMP => Häkchen bei „SSH-Dienst aktivieren“ setzen => „Übernehmen“ klicken
  2. Per Putty oder anderem SSH-Cilent mit der Diskstation verbinden:
    Host: diskstation (oder welchen Namen Ihr vergeben habt oder die IP-Adresse)
    User: root
    Password: Das Admin-Password
  3. Crontab bearbeiten:
    cd /etc[RETURN]
    vi crontab[RETURN]
    mit den Cursortasten an das Ende der untersten Zeile gehen
    [i] drücken, um in den Editiermodus zu gelangen
    Daten eintragen, bspw.
    0 6 * * * root curl http://127.0.0.1/ein_verzeichnis/eine_php_datei.php
    für das tägliche Aufrufen des Sripts morgens um 6 Uhr
    Die einzelnen Werte müssen mit Tabstopps getrennt werden!
    [ESC] drücken, um den Editiermodus zu verlassen
    [:][w][q] drücken, um die crontab zu speichern und den vi zu verlassen
  4. Cron neu starten:
    restart crond[RETURN]
    exit[RETURN]

Update ab DSM 6.0

Synology lässt nunmehr keinen Login auf das root-Konto zu. Stattdessen muss man sich als admin einloggen und dann vor das vi crontab[RETURN] noch ein sudo setzen. Komplett lautet der Aufruf dann
sudo vi crontab[RETURN]

7 Kommentare

  1. Hallo,
    noch eine Frage, ich schreibe in meinem per crontab periodisch aufgerufenen PHP-Skript hiermit in eine Datei: fopen („/volume1/web/scrapedText.txt“, „a“).
    Rufe ich das Script direkt auf (putty mit user admin), wird es ausgeführt und Text in die Datei angehängt – prinzipiell geht es also.
    Per crontab (sudo restart crond habe ich gemacht) funktioniert das aber nicht, die Datei wird nicht erweitert, ich weiß also nicht mal, ob das Skript überhaupt aufgerufen wird oder nur z.B. Dateizugriffsrechte fehlen.
    Die obige Datei hat standardmäßig „-rwxrwxrwx+ 1 http http“ als Zugriffsrechte, den Admin habe ich in die Gruppe http aufgenommen – das müsste aber nicht mal nötig sein.
    Wird das Skript nicht unter dem Admin ausgeführt?
    Danke & Gruß
    Michael

    • Ich habe das Problem, dass die Datei nicht beschrieben wird, hierdurch gelöst:
      in der crontab wird jetzt als Befehl
      /usr/bin/php /volume1/web/check/check.php
      aufgerufen statt
      curl http://127.0.0.1/check/check.php
      In /usr/bin sind sowohl curl als auch php enthalten, vielleicht hätte auch die Pfadangabe vor „curl“ genügt, wenn man jedoch den Aufruf zum Test mit php in putty ausführt, erscheinen eventuelle Fehlermeldungen, bei dem curl-Befehl wurden diese bei mir unterdrückt (sicher auch Einstellungssache) – insofern ist php besser und curl in diesem ja auch eingebunden (zumindest bei meiner relativ aktuellen Installation).

  2. Vielen Dank für die Info!
    Bevor ich das oben ausprobiere, würde ich das PHP-Skript gerne einfach mal in Putty in der Shell ausführen, um zu sehen, ob der Pfad stimmt und das Skript überhaupt startet. Ich bekomme aber immer „Sorry, the page you are looking for is not found.“
    Meine PHP-Datei liegt hier (vom Admin-Zugang aus gesehen): /volume1/Transfer/Check/Check.php und ich rufe auf:
    curl http://127.0.0.1/volume1/Transfer/Check/Check.php
    Ich vermute, der Pfad stimmt nicht, wie wäre es richtig? Oder geht ein Direktaufruf so gar nicht?
    Danke & Gruß
    Michael

    • StableWeb

      7. Januar 2017 um 14:42

      Wenn ich mich nicht sehr irre, ist standardmäßig /volume1/web/ als Pfad vorgesehen. Außerhalb dieses Pfades wird es nicht funktionieren.

      • Danke für die Antwort. Ich habe „web“ als neuen shared folder angelegt und die Rechte entsprechend vergeben und die Dateien dort hinverschoben. Aufruf wie oben, nur mit „web“ statt „Transfer“.
        Aber schade, es funktioniert trotzdem nicht. Ich habe nur das PHP 5.6-Paket installiert und am Laufen, in diesem ist ja Curl enthalten. Curl –help bringt auch die ganzen Parameter, das sollte also schon funktionieren. Einen extra Apache o.ä. muss ich doch nicht extra noch installieren, um ein PHP-Skript auszuführen, das aktuell nur mal phpinfo ausgibt – oder?

        • StableWeb

          7. Januar 2017 um 18:49

          Web Station hast Du aber schon instaliert, oder?!

          Siehe auch:
          https://www.synology.com/de-de/knowledgebase/DSM/help/WebStation/application_webserv_general

          • Nein, hatte ich explizit nicht gemacht. Das NAS hat für seine Oberfläche ja einen Webserver und nutzt PHP, da wusste ich nicht, dass man separat nochmal WebStation, Apache & PHP installieren muss etc. Ich will ja keinen Webserver betreiben, sondern nur periodisch eine PHP-Datei ausführen, die dann im Internet Daten holt, auswertet und das Ergebnis in einer Datei ablegt. Es geht aber leider nicht ohne die o.g. Programme…
            Aber egal, jetzt wird mir dank der Beschreibung oben das Skript ausgeführt und die Ausgabe in eine Datei geschrieben!
            Wichtig: ich habe das PHP-Skript hier abgelegt: /volume1/web/check/check.php. In der crontab muss dann angegeben werden: curl http://127.0.0.1/check/check.php.
            Da man die Dateien im verzeichnis web in File Station sieht, kann man diese mit dem tauglichen Text-Editor direkt bearbeiten (er macht Syntax-Hervorhebung & zeigt zusammengehörende Klammern an).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

*

© 2017 StableWeb / CMS-EDV

Theme von Anders Norén↑ ↑