Cron wird nicht automatisch ausgeführt (Linux)

Hallo zusammen,

ich habe mich hier angemeldet, da ich den Cron unter Linux für Matomo nicht automatisiert bekomme.

Die Datei steht - wie in der Doku beschrieben - wird aber nicht (automatisiert) ausgeführt.

Wenn ich den Cron teste, scheint er aber zu funktionieren.

su www-data -s /bin/bash -c "/usr/bin/php /path/to/matomo/console core:archive --url=http://example.org/matomo/"

Was habe ich falsch gemacht? Benötigt ihr weitere Informationen?

Ich bin für jede Hilfe dankbar!

blue

Was heißt “unter Linux”? Auf einem PC oder auf einem Server?

Bist du dir sicher, dass die Website unter HTTP und nicht unter HTTPS erreichbar ist?

Wo richtest du den Cronjob ein? Auf der Command Line?
Zum anlegen/editieren:
crontab -e
Zum ansehen/prüfen:
crontab -l

Ohne Logs:
5 * * * * php /path/to/matomo/console core:archive --url=https://matomo.example.com/ > /dev/null
mit Logs:
5 * * * * php /path/to/matomo/console core:archive --url=https://matomo.example.com/ > /path/to/logs/matomo-archive-$(date +"\%Y\%m\%d\%H\%M\%S").log

* * * * *    
┬ ┬ ┬ ┬ ┬
│ │ │ │ └ Tag in der Woche (0-7) (Sonntag 0 oder 7)
│ │ │ └── Monat (1-12)
│ │ └──── Tag im Monat (1-31)
│ └────── Stunde (0-23)
└──────── Minute (0-59)
1 Like

Guten Morgen @melbao

Mit Linux meine ich einen Server - Debian 12 sofern relevant.

Du hast natürlich recht, die Website ist dank certbot nur mit https erreichbar. Der Code-Schnippsel zum testen des Cron war als Beispiel 1:1 aus der Dokumentation übernommen. Abgesehen von example.com würde er bei mir natürlich wie folgt aussehen:

sudo su www-data -s /bin/bash -c "/usr/bin/php /var/www/matomo/console core:archive --url=https://matomo.example.com"

Eingerichtet habe die den Cron wie in der Dokumentation beschrieben. Als erstes die entsprechende Cron-Datei mit

nano /etc/cron.d/matomo-archive

angelegt, und folgendes in diese Datei geschrieben:

MAILTO="matomo@example.com"
5 * * * * www-data /usr/bin/php /var/www/matomo/console core:archive --url=https://matomo.example.de > /home/sudouser/matomo-archive.log

Aber leider funktioniert das nicht.

Macht es Sinn diesen Teil hinzuzufügen? Dann bekomme ich jede Stunde einen log, und die Datei wird nicht mehr überschrieben, oder?

Vielen Dank schon mal für deine Hilfe

Viel Ahnung habe ich davon auch nicht, dass ich jeden Fehler erkennen würde. Erkennbar sind für mich nur die Unterschiede deiner zur herkömmlichen Vorgehensweise.

crontab = Textdatei
cronjob = command
beides = cron

Ob es funktioniert, wenn ein Crontab allein nur per nano und dann noch mit eigenst vergebenen Namen funktioniert, da bin ich überfragt. Weil der Cronjob bei dir jedoch nicht funktioniert, rate ich zur herkömmlichen Vorgehensweise.
Lösche deinen Crontab und gehe so vor:
(Beispiel mit editor nano)

crontab -e
[Insert mode. right mouse click available for paste]
Ctrl+o (save)
Ctrl+x (exit)
crontab -l

(Beispiel mit editor vim) (PS: Numpad nicht aktiv)

crontab -e
i
[Insert mode. right mouse click available for paste]
ESC [Taste]
ZZ (speichen)
ZQ (nicht speichern)
crontab -l

Das www-data ist zu viel im tatsächlichen Cronjob.
Das /usr/bin/php kann durch php ersetzt werden. In beiden Fällen wird immer das aktuelle default PHP verwendet.
PS: PHP kann auch auf der command line ausgeführt werden. Sprich, es kann auch so getestet werden:
php '/path/to/matomo/console core:archive --url=https://matomo.example.com/' > /dev/null
Ohne Gewähr, weil ungetestet.

Wegen der Log-Datei. Mit dem Datumsteil wird jedesmal eine neue Logdatei angelegt. Das verschafft einen Überblick über die Dateigrößen und somit der erledigten “Arbeit” des Archivierungsprozesses. Regelmäßiges Löschen ist dann angesagt. Falls das nicht erwünscht ist, dann den Datumsteil weglassen.

Falls es im Log charset Probleme gibt, dann ein --no-ansi mit in die Zeile (command) packen.

1 Like

Wenn ich das manuell teste, erstellt er die Datei mit folgender Fehlermeldung als Inhalt:
Could not open input file: /var/www//matomo/console core:archive --url=https://analytics.example.com

Ich denke mal, weil der sudouser versucht auf die Dateien von www-data zuzugreifen, kann das sein? Wie fixe ich das?

sudo chmod -R u+rwX,g+rX,o+rX /var/www/matomo/console

So?

Edit: Ich hab einen Denkfehler, oder? Der Cron wird ja vom System ausgeführt, nicht vom sudouser?

Keine Ahnung.

Probiere das auf der Kommandozeile (SSH Terminal):

php /path/to/matomo/console core:archive --no-ansi --url=https://matomo.example.com/ > /path/to/logs/matomo-archive-$(date +"%Y%m%d%H%M%S").log

oder so ohne Log:

php /path/to/matomo/console core:archive --no-ansi --url=https://matomo.example.com/ > /dev/null

oder auch so mit Ausgabe im Terminal:

php /path/to/matomo/console core:archive --no-ansi --url=https://matomo.example.com/

Und wenn es nicht funktioniert, dann checke die Server-Error-Logs.

Bei mir funktionieren alle drei.

Mein cron funktioniert mittlerweile, vielen Dank dir!

Leider funktioniert er nicht mit einem Zeitstempel, da bricht der cron bei Erstellung der Datei ab. Aber das lasse ich jetzt einfach so :slight_smile:

Der Zeitstempel für den Dateinamen in der Kommandozeile:
$(date +"%Y%m%d%H%M%S")

Der Zeitstempel für den Dateinamen in einem Cronjob:
$(date +"\%Y\%m\%d\%H\%M\%S")

Wenn das nicht funktioniert, dann weiß ich auch nicht, dann einfach weglassen.

1 Like

Funktioniert, danke dir!

Ich hab das jetzt lediglich aufs Datum umgeschrieben, somit habe ich (in der Theorie) immer den letzten Log des Tages:

matomo_$(date +"\%Y-\%m-\%d").log

Somit sollte sich das Verzeichnis auch nicht all zu schnell füllen.