Plesk Cronjob für ein PHP-Skript mit Parametern einrichten

Bei vielen Webhosting Paketen gibt es die Möglichkeit einen Cronjob einzurichten. Leider musste ich nach dem Umstieg von einem 1&1 Managed Homepage Server auf einen 1&1 Linux Root Server feststellen, dass diese Option im Control Center nicht mehr verfügbar war. Auch meine Suche nach dem „Crontab“ in Plesk war erst einmal erfolglos, da die Funktion an der beschriebenen Stelle nicht zu finden war. Durch Zufall habe ich sie dann doch gefunden.

Plesk Hauptmenü - Server

Um einen Cronjob anzulegen navigiert ihr im Hauptmenü zum Abschnitt Server und wählt dort „Geplante Aufgaben“. Anschließend bekommt ihr eine Liste mit allen Benutzern angezeigt, die auf eurem Server vorhanden sind. Jedem dieser Benutzer könnt ihr einen Cronjob zuteilen. Um ein PHP-Skript auszuführen solltet ihr den Benutzer wählen, der auf eurem Server den Apache-Server ausführt. Dies ist meistens der Benutzer namens „wwwrun“. Blättert also einfach auf die entsprechende Seite oder sucht nach dem Benutzer:

Geplante Aufgaben

Nachdem ihr den Benutzer ausgewählt habt klickt auf „Weiter“. Ihr gelangt nun auf die Seite mit den „Crontab-Aufgaben“ für den entsprechenden Benutzer. Hier hat sich also die Crontab Einstellung versteckt. Ihr könnt nun oben eine „Neue Aufgabe hinzufügen“:

Crontab Aufgaben von wwwrun

In die Felder Minute, Stunde und Tag des Monat könnt ihr entweder eine Zahl eingeben oder einen Stern, um den Cronjob für jeden Wert auszuführen. In dem Beispiel wird als der Cronjob an jedem Tag eines Monat um 00:00 Uhr ausgeführt. Wenn ihr den Cronjob auch jeden Monat und an jedem Tag einer Woche ausführen lassen möchtet, dann tragt unten ebenfalls einen Stern ein.

Bearbeitung der Crontab-Aufgabe

Wenn ihr ein lokales Programm oder ein PHP-Skript ohne Parameter starten möchtet, könnt ihr einfach den Befehlsnamen in der Feld „Befehl“ eintragen. Wenn ihr allerdings etwas in der Form „php /srv/www/vhosts/example.com/httpdocs/skript.php?var1=value“ eintragt, dann versucht PHP die Datei mit dem Namen „skript.php?var1=value“ zu finden, die es natürlich nicht gibt. Ein sehr einfacher Trick dies zu lösen ist die Verwendung von wget. Dieser Befehlt wird normalerweise dazu genutzt eine Datei von einer Website zu laden. Damit aber nicht eine Datei mit dem Namen „skript.php?var1=value“ erzeugt wird, nutzen wir den Parameter „--spider„, der den Download unterdrückt. Wir führen also somit einfach nur ein PHP-Skript auf einer beliebigen URL aus. Sobald alle Einstellungen vorgenommen sind, könnt ihr die Einstellungen mit einem Klick auf „OK“ speichern.

Crontab-Aufgaben aktualisiert

Ihr solltet nun in der Übersicht euren eben erzeugt Cronjob sehen können. Sobald der Zeitpunkt, den ihr angegeben habt erreicht ist, sollte das Skript ausgeführt werden. Zu den Cronjobs wird ein Bereicht erstellt und an eine E-Mail-Adress verschickt. Diese könnt ihr über „Einstellungen“ eintragen:

Crontab-Eigenschaften bearbeiten

Bei meinen Cronjobs wurde bisher noch keine E-Mail verschickt. Eventuell wird auch nur im Fehlerfall eine Mail mit der Fehlermeldung verschickt. Oder aber mein Server leitet die Mail nicht korrekt an den externen 1&1 Mailserver weiter, da es sich bei der E-Mail-Adresse um eine Domain handelt, die er selbst verwaltet. Sobald ich das Rätsel gelöst habe werde ich euch natürlich davon berichten.

Ich hoffe der Artikel konnte euch weiterhelfen. Kennt ihr vielleicht auch noch eine tollt versteckte Funktion? Oder sucht ihr eine bestimmte Einstellung? Über Kommentare würde ich mich wie immmer sehr freuen.

Veröffentlicht von

Bernhard ist fest angestellter Webentwickler, entwickelt in seiner Freizeit Plugins, schreibt in seinem Blog über WordPress und andere Themen, treibt sich gerne bei den WP Meetups in Berlin und Potsdam herum und läuft nach Feierabend den ein oder anderen Halbmarathon.

23 Kommentare » Schreibe einen Kommentar

  1. „Bei meinen Cronjobs wurde bisher noch keine E-Mail verschickt. Eventuell wird auch nur im Fehlerfall eine Mail mit der Fehlermeldung verschickt. Oder aber mein Server leitet die Mail nicht korrekt an den externen 1&1 Mailserver weiter, da es sich bei der E-Mail-Adresse um eine Domain handelt, die er selbst verwaltet.“
    >>

    Bei mir kam ne Mail im Fehlerfall mit folgendem Text:

    –17:02:01– https://xxxx.php?y=xxx
    => `xxxx.php?y=xxx‘
    Resolving blabla.de… xxx.xxx.xxx.xxx
    Connecting to blabla.de|xxx.xxx.xxx.xxx|:443… connected.
    ERROR: Certificate verification error for blabla.de: self signed certificate in certificate chain
    ERROR: certificate common name `blabla.de‘ doesn’t match requested host name `blabla.de‘.
    To connect to blabla.de insecurely, use `–no-check-certificate‘.
    Unable to establish SSL connection.

    • Es scheint wirklich so zu sein, dass nur im Fehlerfall eine Mail verschickt wird. Ich persönlich finde das aber auch gut so. Denn wenn man z.B: einen Cron-Job alle 10min ausführt (was ich bei einem auch tue) dann würde das Postfach am Tag mit 144 Mails zugespamt werden.

  2. hallo ,

    ich habe das nach der beschreibung probiert aber es geht nicht.

    wie muss der befehl genau lauten , wenn ich in plesk für folgende datei den cronjob brauche.
    die datei heisst invoice.php und befindet sich im ordner cron_jobs

    ich habe es auf diese art versucht aber es kommt diese fehlermeldung
    invoice_cron.php: Permission denied

    Cannot write to `invoice_cron.php‘ (Permission denied).
    mein befehl sah so aus :
    wget http://meineDomain.de/cron_jobs/invoice_cron.php?var1=value–spider

    ich habe es versucht den ordner und die datei mit chmod 777 und auch 755 recht zu geben aber bei beidne die fehlermeldung

    hilfeeeeee

    • Hallo Sara.

      Ich glaube was dir fehlt ist ein Leerzeichen vor dem „–spider“. Dieser Parameter sorgt ja gerade dafür, dass keine Datei erzeugt wird. Daher musst du dann auch keine Rechte auf irgendwelche Ordner setzen.

      • hallo bernhard , danke für deine antwort.

        ich kriege das nicht gebacken. ich hab es auf verschiedene arten versucht aber es kommt per email immer ne fehlermeldung.

        hier die versuche :

        #############################################################
        wget http://domain.de/cron_jobs/invoice_cron.php?var1=value — spider

        HTTP request sent, awaiting response… 200 OK
        Length: unspecified [text language=“/html“][/text]
        Remote file exists and could contain further links,
        but recursion is disabled — not retrieving.

        ################################################

        wget http://domain.de/cron_jobs/invoice_cron.php?var1=value – -spider

        wget: invalid option — s
        Usage: wget [OPTION]… [URL]…

        Try `wget –help‘ for more options.

        ########################################################
        wget http://domain.de/cron_jobs/invoice_cron.php?var1=value –spider

        HTTP request sent, awaiting response… 200 OK
        Length: unspecified [text language=“/html“][/text]
        Remote file exists and could contain further links,
        but recursion is disabled — not retrieving.

        ##########################################################

        wget http://domain.de/cron_jobs/invoice_cron.php?var1=value -spider

        HTTP request sent, awaiting response… 200 OK
        Length: 7199 (7.0K) [text language=“/html“][/text][/text]
        index.html: Permission denied

        Cannot write to `index.html‘ (Permission denied).

        #############################################################

        kannst du mir nicht den code schreiben und ich kopiere ihn dann ?

        danke

        sara

  3. hallo bernhard ,

    es hat funktioniert , es lag am code, wahrscheinlich wegen den strichen und vielleicht weil ich das www. in der domain vergessen hatte.
    egal hauptsache es geht jetzt hehe
    ohen dich hätte ich das nicht geschafft !!!

    DANKE, DU BIST EIN PROFI

  4. Hallo,

    auch ich nutze PLESK für die Server Administration und die Anleitung hat mir sehr geholfen. Vielen Dank.

    • Mit einem Shell Befehl funktioniert es nur, wenn man im Skript nicht auf auf SUPERGLOBALS wie z.B. $_REQUEST zugreift. Man müsste also in diesem Fall eine Abfrage einfügen, ob das Skript per Shell oder per Browser-Request aufgerufen wurde. Das war auch der Grund für meine Lösung mit wget, da diese eben ein Skript genau so aufrufen kann, wie ein Aufruf über einen Browser.

  5. Hallo,
    ich habe 3 cronjobs eingerichtet.
    2 davon laufen einwandfrei, wenn ich curl vor den Befehl eingebe.
    Einer läuft nicht.
    Hier das Ergebnis:
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed

    0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
    0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0

    woran kann das liegen?

    • Hallo Bernhard 😉

      Deinem Kommentar fehlen leider die notwendigen Informationen, um dir eventuell sagen zu können, was bei dem Cron-Job nicht funktioniert. Eventuell ist einfach der Befehl ungültig und er wird deshalb sofort abgebrochen.

      Ich würde dich aber bitten, eine solche Frage wirklich einem Experten zu stellen. Es ist nicht Aufgabe dieses Artikels, eine Allgemeine Anleitung zu Cron-Jobs zu geben.

      Am besten wird dir vermutlich bei den Profils von Serverfault geholfen. Dort findest du eventuell auch fertige Lösungen von Nutzern, die ähnliche Probleme hatten. Es ist auf jeden Fall einen Versuch wert.

  6. Hey, mir ist aufgefallen, dass zwei Striche hintereinander ( — ) als ein langer Strich dargestellt wird und daher der Fehler resultiert, denn im Bild sieht man ja, dass es sich um ein zwei Striche handelt.

    ciao

    • Danke für den Hinweis. Ich hatte das damals schon manuell behoben, aber bei der Migration auf mein neues Theme ist da wohl wieder was durcheinander gekommen.

    • Hallo Peter,

      das sieht ja nach einer ziemlich neuen Version von Plesk aus. Ich habe schon seit Langem selbst kein Plesk mehr im Einsatz. Was mir bei deinem Screenshot aber aufgefallen ist, sind die Zahlenbereiche. Ich wüsste nicht, dass die in einem Cronjob so erlaubt sind. Versuche es doch einfach mal jeweils mit einem Stern, so wie du es auch in meinen Screenshots sehen kannst.

      Eine Reaktion wirst du übrigens auf der Seite zur Einstellung des Cron-Job vermutlich nicht sehen.

  7. Danke, Dein Beitrag hat mir mein Cronjob Problem gelöst; vor allem der Hinweis mit dem –spider war sehr nützlich!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert