Keine Aktualisierungen mehr nach Update auf Piwik 2 (Cronjob)

Hallo.

Ich habe jetzt eine Menge recherchiert, aber ich komme jetzt nicht weiter. Technisch bin ich nicht so sattelfest, das ich da komplett durchsteige…

Nach dem Update meiner Piwik Installation (ohne Fehler oder Probleme) vorgestern werden keine Daten mehr ausgegeben. Da ich fast 60 Seiten tracke, läuft die Archivierung über einen Cronjob, der bis zum Update auch einwandfrei funktionierte.

Der Cronjob sieht so aus:


0 */5 * * * /var/www/virtual/***/***/misc/cron/archive.sh >/dev/null 2>&1

Die Sternchen im Pfad sind in echt natürlich mit meinen Accountdaten ersetzt.

Echtzeitdaten werden ausgeliefert. Der manuelle Aufruf des Cron-Scripts (archive.php) über den Browser läuft sauber durch und danach sind auch wieder aktuelle Daten zu sehen.
Mein Hoster (uberspace) kann auch kein Problem erkennen.

Wonach könnte ich noch gucken bzw. was könnte der Grund sein?
Hat jemand eine Idee oder einen Tipp?

Vielen Dank schonmal.

Gruß
Thomas

Hallo.

Ich habe jetzt mal das “>/dev/null 2>&1” aus dem Cronjob entfernt um ein entsprechendes E-Mail Log zu bekommen.

Geliefert wurde folgendes:


PHP Parse error:  syntax error, unexpected T_STRING, expecting T_CONSTANT_ENCAPSED_STRING or '(' in /var/www/virtual/piwikordner/index.php on line 11

Weiß jemand was das bedeuten könnte?

//Edit
Falls jemand fragt, PHP Version ist 5.3.27.

Gruß
Thomas

was steht denn in der “archive.sh”?

Hast du die aktuelle Version 2.0.2 installiert? oder eine davor? :slight_smile:

Versuch mal (habs nicht getestet und sollte auch nur erstmal damit es wieder läuft gemacht werden) in der index.php Datei

Zeile 15 - 20
"if(!defined(‘PIWIK_DOCUMENT_ROOT’)) {
define(‘PIWIK_DOCUMENT_ROOT’, dirname(FILE) == ‘/’ ? ‘’ : dirname(FILE));
}
if (file_exists(PIWIK_DOCUMENT_ROOT . ‘/bootstrap.php’)) {
require_once PIWIK_DOCUMENT_ROOT . ‘/bootstrap.php’;
}"

mit dem hier zu ersetzen:

“define(‘PIWIK_DOCUMENT_ROOT’, dirname(FILE) == ‘/’ ? ‘’ : dirname(FILE));
if (file_exists(PIWIK_DOCUMENT_ROOT . ‘/bootstrap.php’)) {
require_once PIWIK_DOCUMENT_ROOT . ‘/bootstrap.php’;
}”

und schau mal obs dann wieder geht …

Hallo!

Danke für die Rückmeldung.
In der archive.sh steht das hier (hab ich eigentlich nie geändert… kommt die nicht original von Piwik?):


#!/bin/sh -e

# =======================================================================
# BEFORE YOU USE THIS SCRIPT:
# PLEASE DON'T.
# =======================================================================
#
#
#                ==> Use archive.php instead. <==
#
# See documentation at http://piwik.org/setup-auto-archiving/
# =======================================================================

# Description
# This cron script will automatically run Piwik archiving every hour.
# The script will also run scheduled tasks configured within piwik using
# the event hook 'TaskScheduler.getScheduledTasks'

# It automatically fetches the Super User token_auth
# and triggers the archiving for all websites for all periods.
# This ensures that all reports are pre-computed and Piwik renders very fast.

# Documentation
# Please check the documentation on http://piwik.org/docs/setup-auto-archiving/

# How to setup the crontab job?
# Add the following lines in your crontab file, eg. /etc/cron.d/piwik-archive
#---------------START CRON TAB--
#MAILTO="youremail@example.com"
#5 * * * * www-data /path/to/piwik/misc/cron/archive.sh > /dev/null
#-----------------END CRON TAB--
# When an error occurs (eg. php memory error, timeout) the error messages
# will be sent to youremail@example.com.
#
# Optimization for high traffic websites
# You may want to override the following settings in config/config.ini.php:
# See documentation of the fields in your piwik/config/config.ini.php
#
# [General]
# time_before_archive_considered_outdated = 3600
# enable_browser_archiving_triggering = false
#===========================================================================

for TEST_PHP_BIN in php5 php php-cli php-cgi; do
  if which $TEST_PHP_BIN >/dev/null 2>/dev/null; then
    PHP_BIN=`which $TEST_PHP_BIN`
    break
  fi
done
if test -z $PHP_BIN; then
  echo "php binary not found. Make sure php5 or php exists in PATH." >&2
  exit 1
fi

act_path() {
  local pathname="$1"
  readlink -f "$pathname" 2>/dev/null || \
  realpath "$pathname" 2>/dev/null || \
  type -P "$pathname" 2>/dev/null
}

ARCHIVE=`act_path ${0}`
PIWIK_CRON_FOLDER=`dirname ${ARCHIVE}`
PIWIK_PATH="$PIWIK_CRON_FOLDER"/../../index.php
PIWIK_CONFIG="$PIWIK_CRON_FOLDER"/../../config/config.ini.php

PIWIK_SUPERUSER=`sed '/^\[superuser\]/,$!d;/^login[ \t]*=[ \t]*"*/!d;s///;s/"*[ \t]*$//;q' $PIWIK_CONFIG`
PIWIK_SUPERUSER_MD5_PASSWORD=`sed '/^\[superuser\]/,$!d;/^password[ \t]*=[ \t]*"*/!d;s///;s/"*[ \t]*$//;q' $PIWIK_CONFIG`

CMD_TOKEN_AUTH="$PHP_BIN -q $PIWIK_PATH -- module=API&method=UsersManager.getTokenAuth&userLogin=$PIWIK_SUPERUSER&md5Password=$PIWIK_SUPERUSER_MD5_PASSWORD&format=php&serialize=0"
TOKEN_AUTH=`$CMD_TOKEN_AUTH`

CMD_GET_ID_SITES="$PHP_BIN -q $PIWIK_PATH -- module=API&method=SitesManager.getAllSitesId&token_auth=$TOKEN_AUTH&format=csv&convertToUnicode=0"
ID_SITES=`$CMD_GET_ID_SITES`

CMD_GET_SEGMENTS_TO_ARCHIVE="$PHP_BIN -q $PIWIK_PATH -- module=API&method=CoreAdminHome.getKnownSegmentsToArchive&token_auth=$TOKEN_AUTH&format=csv&convertToUnicode=0"
SEGMENTS_TO_ARCHIVE=`$CMD_GET_SEGMENTS_TO_ARCHIVE`

echo "Starting Piwik reports archiving..."
echo ""
for idsite in $ID_SITES; do
  TEST_IS_NUMERIC=`echo $idsite | egrep '^[0-9]+$'`
  if test -n "$TEST_IS_NUMERIC"; then
    for period in day week month year; do
      echo ""
      echo "Archiving period = $period for idsite = $idsite..."
      CMD="$PHP_BIN -q $PIWIK_PATH -- module=API&method=VisitsSummary.getVisits&idSite=$idsite&period=$period&date=last52&format=xml&token_auth=$TOKEN_AUTH"
      $CMD
      
      for segment in $SEGMENTS_TO_ARCHIVE; do
	    if test $segment != "value"; then
	        # Ignore "No data available" response when there are no segment to pre-process
            if test $segment != "No"; then
            if test $segment != "data"; then
            if test $segment != "available"; then
              echo ""
              echo " - Archiving for visitor segment $segment ..."
              CMD_ARCHIVE_SEGMENT="${CMD}&segment=$segment"
              $CMD_ARCHIVE_SEGMENT
            fi
            fi
            fi
        fi
      done
    done

    echo ""
    echo "Archiving for idsite = $idsite done!"
  fi
done

echo "Reports archiving finished."
echo "---------------------------"
echo "Starting Scheduled tasks..."
echo ""
CMD="$PHP_BIN -q $PIWIK_PATH -- module=API&method=CoreAdminHome.runScheduledTasks&format=csv&convertToUnicode=0&token_auth=$TOKEN_AUTH"
$CMD
echo ""
echo "Finished Scheduled tasks."
echo ""


Und ja, ich hab inzwischen schon die 2.0.2 installiert.

Was noch seltsamer ist… wenn ich die archive.sh einfach in der Shell ausführe, läuft sie auch durch. Nur der Cron iefert eben diese Meldung per E-Mail zurück.

Ich hab die index.php mal wie beschrieben angepasst und melde mich nach dem nächsten Crondurchlauf (15 Uhr) wieder.

Schonmal vielen Dank!

Gruß
Thomas

…was soll ich sagen, das Ergebnis ist das gleiche. Es kommt die Fehlermeldung von oben.
Ich versteh das nicht. :S

Was hat überhaupt die index.php damit zu tun? Und warum läuft das Script manuell aufgerufen problemlos durch?

Muss ich doch nochmal meinen Hoster ansprechen?

Gruß
Thomas

weil du die index.php mit dem Cronjob ja aufrufst … Mach mal das zuvor wieder rückgängig und entferne mal das hier:

“use Piwik\Error;
use Piwik\ExceptionHandler;
use Piwik\FrontController;”

und schau mal obs dann läuft …

Wenn nicht, dann wieder alles rückgängig machen und im Bugtracker nen Ticket erstellen :wink:

Wenn ich das mache, läßt sich meine Piwik - Installation selbst nicht mehr aufrufen (weiße Seite)

Soll ich das trotzdem bis zum nächsten Cronaufruf (alle 5h) entfernen?

Gruß
Thomas

Hallo,

in den von Dir geposteten Scriptzeilen des SH-Scriptes steht:

“Use archive.php instead”

Warum machst Du das nicht?

Ich hatte ein ähnliches Problem. Bei mir lag es daran, dass für archive.php www:www als Owner/Group eingetragen war, ich aber den cronjob als eingeloggter root angelegt hatte.

Ein anschließendes CHOWN root:www archive.php löste das Problem. Alternativ kann man den User, unter dem der cronjob ausgeführt werden soll, auch direkt in der crontab anlegen. Hierzu wird der User, unter dem der Webserver läuft (bspw. www) vor dem PHP-Pfad eingetragen:
https://piwik.org/docs/setup-auto-archiving/

Viele Grüße
piwiktestit

Hallo.

Danke für deine Rückmeldung.
Inzwischen hatte ich nochmal Rücksprache mit meinem Hoster, der mir ein ähnliches Vorgehen vorschlug.

Mit folgender Zeile sollte ich es versuchen:


php /var/www/virtual/meineseite/misc/cron/archive.php -- url=http://piwik.meineseite.de

Auch diese Zeile, ausgeführt ganz normal über die Kommandozeile, läuft sauber durch (gerade wieder probiert)
Als Cronjob wird aber auch hier ein Fehler gemeldet… diesmal dieser:


PHP Parse error:  syntax error, unexpected T_STRING in /var/www/virtual/meineseite/misc/cron/archive.php on line 12

Das alles läuft ja bei Uberspace… und dort gibts ja keine unterschiedlichen User, so wie ich das verstehe

Frohes Fest!
Thomas

Hi,

hast Du Dich vielleicht vertippt?

– url=http://piwik.meineseite.de
muss lauten
–url=http://piwik.meineseite.de

Gruß
piwiktestit

P.S.: Ganz bestimmt gibt es da unterschiedliche User :wink:

Du meinst, da ist ein Leerzeichen zu viel?

Aber selbst auf der beschriebenen Piwik Seite:
https://piwik.org/docs/setup-auto-archiving/
ist das doch mit Leerzeichen im Beispielcode?

Aber ich probiers gern mal aus.

Unterschiedliche User, klar… nur nicht ich innerhalb meines Accounts… :slight_smile:

Gruß
Thomas

Es geht im vorliegenden Fall auch nicht um die User-Accounts, sondern die User, unten denen bestimmte Prozesse gestartet werden.
Das hat nichts mit den User-Accounts zu tun, von denen DU sprichst!

Gruß
piwiktestit

Ist ok - ich besitze diesbezüglich auch eher nur Halbwissen… Hat ja aber wahrscheinlich nichts mit meinem Problem zu tun.

Das eine Leerzeichen hat übrigens nichts bewirkt. Der letzte Cronaufruf brachte wieder den selben Fehler…

Gruß
Thomas

Das spricht m.E. dafür, dass irgendwelche Environment-Variablen aus der “Sicht” des Cronjobs nicht entsprechend gesetzt sind, wie es beim direkten Aufruf aus der Shell der Fall ist.

Hast Du mal probiert, den User, als der Du eingeloggt bist, in der crontab VOR das archive-Kommando zu zu schreiben, wie es unter How to Set up Auto-Archiving of Your Reports - Analytics Platform - Matomo beschrieben wird?

Viele Grüße
piwiktestit

Hallo.

Ich konnte (so wie es aussieht) das Problem mit einem netten Mitarbeiter meines Hosters lösen.
Die Lösung in Kurzfassung (mit den Fachwörtern meines Hosters):

Das Environment meiner Shell unterscheidet sich von dem in meinem Cron. Wir haben dann zwei Variablen aus den Shell (SHELL und PATH) in die/den Crontab eingetragen und damit funktionierts.

Warum das so ist und was das bedeutet und warum das in der alten Version von Piwik nicht nötig war… wird mir wohl, aufgrund des fehlenden KnowHows, ein Rätsel bleiben.

Danke nochmal an alle, die mir geholfen haben!

Rutscht gut ins neue Jahr.

Thomas

Was meinen o.a. Verdacht bestätigt:
"Das spricht m.E. dafür, dass irgendwelche Environment-Variablen aus der “Sicht” des Cronjobs nicht entsprechend gesetzt sind, wie es beim direkten Aufruf aus der Shell der Fall ist. "

Ebenfalls einen “guten Rutsch!”

piwiktestit

Nochmals kurz Danke.

Ist es denn unüblich das sich diese Variablen in dieser Form in einer Serverkonfig unterscheiden?

Eins bleibt auf jeden Fall… es muss sich ja auch was bei Piwik geändert haben, weil diese Anpassung in allen 1er Versionen nicht nötig war.
Könnte ja auch interessant sein für andere Nutzer - zumindest in Verbindung mit Uberspace.

Gruß
Thomas

Bitte mal Piwik erneut und original aus dem Download-Archiv hochladen (in FTP Binärmodus!). Es scheint, als wären einige Dateien nicht korrekt angelegt worden.

Hallo,

auch, wenn jetzt alles funktioniert?
Kann da nichts passieren?

Gruß
Thomas

Die Frage verstehe ich nicht.