Cronjobs werden nicht ausgeführt

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Cronjobs werden nicht ausgeführt

Beitrag von homtata »

Hallo Gemeinde,

für mein aktuelles Projekt stehen mir serverseitig beim Provider keine Cronjobs zur Verfügung. Daher habe ich jetzt einen Cronjob in Contenido eingerichtet - im Prinzip soll morgens zu einer bestimmen Uhrzeit eine Mail generiert werden mit tagesaktuellen Daten, die der Kunde benötigt.
Der Cronjob ist programmiert, eingerichtet und funktioniert auch, wenn ich ihn händisch auslöse.
Nur funktioniert die Zeitsteuerung überhaupt gar nicht... oder nur in bestimmten Varianten.

Aktuell will ich, dass der Cronjob morgens um 6 Uhr ausgeführt wird, daher steht in "Cronjob bearbeiten", sprich der crontab.txt:

Code: Alles auswählen

* 6 * * * cronjob_adminmail.php
Das funktioniert nicht. Gestern ging es mal, den Cronjob alle 5 Minuten ausführen zu lassen:

Code: Alles auswählen

*/5 * * * * cronjob_adminmail.php
Hab ich ein Verständnisproblem mit diesen PseudoCrons? Wie werden die ausgelöst? Ich habe damit nicht wirklich Erfahrung....

Edit:
Ich konnte es inzwischen etwas eingrenzen. Führe ich den Cronjob manuell im Backend aus, scheinen alle Contenido-Klassen geladen zu sein, die ich im Cronjob benötige.
Wird er aber unabhängig davon ausgeführt, sind wohl keine Klassen instanziert... Wie kriege ich die Cronjob-Datei dazu, alle Klassen, die sonst der Autoloader bereithält, auch hier zur Verfügung zu stellen? Auf Funktionen wie "getEffectiveSetting" funktionieren hier nicht beim unabhängigen Aufruf durch PseudoCron...
Faar
Beiträge: 1951
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Hat sich bedankt: 15 Mal
Kontaktdaten:

Re: Cronjobs werden nicht ausgeführt

Beitrag von Faar »

homtata hat geschrieben:Hallo Gemeinde,
Hallo erstmal 8)
für mein aktuelles Projekt stehen mir serverseitig beim Provider keine Cronjobs zur Verfügung.
Das ist schon mal schlecht, wenn man Cronjobs braucht.
Daher habe ich jetzt einen Cronjob in Contenido eingerichtet
Wie soll der funktionieren, wenn es serverseitig keine Cronjobs gibt?
- im Prinzip soll morgens zu einer bestimmen Uhrzeit
Das ist die ureigenste Aufgabe eines Cronjobs.
Daher der Name Cron.
Der Cronjob ist programmiert, eingerichtet und funktioniert auch, wenn ich ihn händisch auslöse.
Das ist dann kein echter Cronjob, sondern so eine Art Pseudocron.
Nur funktioniert die Zeitsteuerung überhaupt gar nicht...
Natürlich nicht, weil es gibt ja keinen Cronjob :roll:
Aktuell will ich, dass der Cronjob morgens um 6 Uhr ausgeführt wird,
Also du brauchst einen echten Cronjob.
Hast den aber nicht.
Daraus folgt?

Code: Alles auswählen

* 6 * * * cronjob_adminmail.php
Das funktioniert nicht.
... weil vielleicht kein Cronjob zur Verfügung steht. :shock:
Gestern ging es mal, den Cronjob alle 5 Minuten ausführen zu lassen:
Zufall.

Code: Alles auswählen

*/5 * * * * cronjob_adminmail.php
Hab ich ein Verständnisproblem mit diesen PseudoCrons?
Wahrscheinlich.
Diese Art Crons gibt es auch bei Wordpress (Newsletter Plugin) und anderen. Das sind keine echten Cronjobs.
Sie werden angestoßen, wenn jemand die Seite aufruft, weil nur dann der Programmcode der Seite auf dem Server läuft und nur dann auch ein solcher Pseudocron abgearbeitet werden kann.
Sollte also jemand alle 5 Minuten oder öfter die Seite bedienen, dann wird auch ein Cron alle 5 Minuten bedienbar gemacht.
Wie werden die ausgelöst? Ich habe damit nicht wirklich Erfahrung....
Eben, indem die Seite aufgerufen wird, läuft der Seitencode und kann den eigenen Cron bedienen.
Pseudo halt.

Wer echte Cronjobs braucht, sollte echte Cronjobs beim Hoster bestellen.
Es gibt noch eine andere Variante an Pseudocronjobs, die per Batch gestartet werden und sich selbst immer wieder aufrufen.
Das habe ich früher mal programmiert.
starten:

Code: Alles auswählen

nohup /bin/bash /var/www/cron.sh > /dev/null 2>&1 &
das programm das mit Parametern gestartet wird:

Code: Alles auswählen

/usr/bin/php /var/www/cron.php param1 param2 param3
der Check im Cronprogramm selbst:

Code: Alles auswählen

$count = (int)exec("ps aux | grep 'cron.php $param1 $param2 $param3' | grep -v grep | wc");

if ($count>1) //wenn mehr als einmal cron.php läuft ...
{
	exit();
}
Die Dinger prüfen sich selbst, ob sie einmal oder mehrmals gestartet wurden und "löschen" sich selbst, wenn es mehr als eine laufende Instanz gibt.
Das mit der Zeit ist dann so eine Sache, die man selbst einprogrammieren muss.
Da das Programm ständig 24/7 läuft, müsste man dann also die Uhrzeit checken, alle Minute in dem Fall.
Erst wenn es genau 6 Uhr ist (Zeitzone beachten!), startet dieser Pseudocron das, was es ausführen soll.

Der Haken an der Sache:
Man braucht dazu die Möglichkeit, überhaupt so ein Batch zu starten und etwas in die Prozessliste eintragen zu lassen.
Geht eigentlich fast nur bei root Servern...
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
Faar
Beiträge: 1951
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Hat sich bedankt: 15 Mal
Kontaktdaten:

Re: Cronjobs werden nicht ausgeführt

Beitrag von Faar »

Du brauchst dazu natürlich einen Root oder Admin Zugang und Putty als Terminal, ein wenig Hintergrundwissen um nohup und etwas bash (Shell) KnowHow.
Und natürlich das Programm, welches die Daten sammelt und als Mail versendet.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
Zuschauer
Beiträge: 141
Registriert: Do 5. Dez 2013, 08:57
Kontaktdaten:

Re: Cronjobs werden nicht ausgeführt

Beitrag von Zuschauer »

Du kannst natürlich auch das Online-Script per Batch auf dein Rechner (oder noch besser: den Server in der Firma) zeitgesteuert aufrufen lassen.

Gruß
Zuschauer

PS: Die Includes kriegst du, wenn du die Anweisungen aus der Backend- oder Frontend-Startdatei in dein Script übernimmst.
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Cronjobs werden nicht ausgeführt

Beitrag von homtata »

Danke für Euren Input -inzwischen sehe ich klarer.
Die PseudoCrons kommen nicht in Frage, dafür ist auf der Seite zu wenig Traffic.
Das Einbinden des Autoloaders mag auch nicht klappen, und das wird mir jetzt alles zu doof.

Dann deaktiviere ich das Cronjob-Plugin von Contenido wieder - das nützt mir so in der Form dann nix...

Ich habe einen Service für kostenlose Cronjobs gefunden, wo das nötige Event nun zeitgesteuert getriggert wird - das reicht mir erstmal vollkommen für meine Zwecke und ist für den Kunden kostentechnisch die tragbarere Lösung...
Antworten