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.
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?
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.
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/
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
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!
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.
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.
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. "
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.
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.