Archiv Cron Unable to Start Session

Hallo,

ich habe einen nagel neuen Server:

PHP Version 5.2.6-1+lenny9
lighttpd
mysql (Client API version 5.0.51a )

darauf habe ich piwik installiert. Soweit alles ok.
Da ich mehrere Website hinzufügen will und die weit mehr als 100000 Besucher pro Tag haben möchte ich den Auto Archiv Cron laufen lassen.

Der Cron gibt mir immer eine Fehlermeldung:

Starting Piwik reports archiving...

Reports archiving finished.
Starting Scheduled tasks...

<html>
<head>
    <title>Piwik &rsaquo; Error</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="shortcut icon" href="plugins/CoreHome/templates/images/favicon.ico" />
    <link rel="stylesheet" type="text/css" href="themes/default/simple_structure.css" />
</head>
<body>
<div id="content">
    <div id="title"><span id="h1">Piwik </span><span id="subh1"> # open source web analytics</span></div>
    
<p>Unable to start session.  Check that session.save_path or tmp/sessions is writeable.</p> </div>
</body>
</html>
Finished Scheduled tasks.

phpinfo()

session
Session Support     enabled
Registered save handlers     files user
Registered serializer handlers     php php_binary wddx

Directive    Local Value    Master Value
session.auto_start    Off    Off
session.bug_compat_42    On    On
session.bug_compat_warn    On    On
session.cache_expire    180    180
session.cache_limiter    nocache    nocache
session.cookie_domain    no value    no value
session.cookie_httponly    Off    Off
session.cookie_lifetime    0    0
session.cookie_path    /    /
session.cookie_secure    Off    Off
session.entropy_file    no value    no value
session.entropy_length    0    0
session.gc_divisor    100    100
session.gc_maxlifetime    1440    1440
session.gc_probability    0    0
session.hash_bits_per_character    4    4
session.hash_function    0    0
session.name    PHPSESSID    PHPSESSID
session.referer_check    no value    no value
session.save_handler    files    files
session.save_path    /var/lib/php5    /var/lib/php5
session.serialize_handler    php    php
session.use_cookies    On    On
session.use_only_cookies    Off    Off
session.use_trans_sid    0    0

Bereits versuchte Lösungsansätze:

  • tmp/session chmod -R 777
  • /var/lib/php5/ chmod -R 777
  • Cron nicht mit www-data sondern mit root ausführen

Kann mir bei dem Problem bitte jemand helfen ich verzweifele!!

Mit freundlichen Grüßen

dreamz

EDIT:
Ich sollte vielleicht noch dazusagen, dass der Weblogin etc. alles einwandfrei funktioniert.

Hi,

I have the same problem on Gentoo

PHP Version 5.2.5-pl1-gentoo
MYSQL 5.0.44

I check session.save_path, it’s set to /tmp and chmod of /tmp is 777.
I chmod Piwik/tmp/ to 777 and the same for Piwik/tmp/sessions.
I test to run sh script with root user and web site user.

I always have the same bad output.

I put some echo in archive.sh and all commands like “$PHP_BIN -q $PIWIK_PATH …” (CMD_TOKEN_AUTH, CMD_GET_ID_SITES…) return the html Piwik Error.

Regards

Hallo Zusammen,
ich habe dasselbe Problem.
Vielleicht sollten wir das mal als Bug melden?
Oder habt Ihr inzwischen eine Lösung?

Gruesse!

War das phpinfo vom Webserver oder auf der Konsole?
Teilweise nutzen php im Webserver und php auf der Konsole andere php.ini-Dateien (unter Gentoo auf jeden Fall), daher sollte der phpinfo Output auf der Konsole geprüft und evtl. die korrekte php.ini-Datei geändert werden.

Hallo Leute,

ich habe das gleiche Problem und keine Lösung in Sicht.
Wie Thomas Seifert meinte ist es richtig, dass für php aufrufe von der Konsole andere php.ini gelten als per webserver.

Dort habe ich natürlich auch für korrekte Einträge in der php.ini bei session.save_path gesorgt.
Aber wie hpsam schon sagte, erzeugen CMD_TOKEN_AUTH, CMD_GET_ID_SITES diesen fehler.

sämtliche in Frage kommende tmp verzeichnisse haben die berechtigung chmod 777, ich sehe echt kein land mehr.

ich habe auch eine bootstrap.php erzeugt, um zu prüfen welche tmp verzeichnisse benutzt werden, es scheinen die richtigen zu sein.
Noch irgendwelche ideen?

Danke, Thomas

Hi,
In my case, the phpinfo informations are from Command Line Interface.
regards

Hi all,

ich habe mich noch mit etwas Debugging beschäftigt, hier meine Erkenntnisse:

In der Session.php findet ein Exception Handling statt, doch die Fehlermeldung, die wir oben gesehen haben wird immer ausgegeben, auch wenn die Verzeichnisse schreibbar sind. Das Problem ist, dass schon eine Session geöffnet wurde.

Ich habe in der archive.sh folgendes geändert:
TOKEN_AUTH=$CMD_TOKEN_AUTH
echo $TOKEN_AUTH
Um zu sehen, was das ergebnis ist.

Ich habe in der Session.php folgende Änderungen gemacht und mir die Exception mal ausgeben lassen:

try {
    Zend_Session::start();
} catch(Exception $e) {
    // This message is not translateable because translations haven't been loaded yet.
    $x1 = @is_writable($sessionPath);
    Piwik_ExitWithMessage('x1 ' . $x1 . ' Unable to start session.  Check that session.save_path or tmp/sessions is writeable. ' . $sessionPath . ' ' . $e);

Die Ausgabe ist

x1 1 Unable to start session. Check that session.save_path or tmp/sessions is writeable. /kunden/.../webroots/ssl/piwik/tmp/sessions exception 'Zend_Session_Exception' with message 'Session must be started before any output has been sent to the browser; output started in /0' in /kunden/.../webroots/ssl/piwik/libs/Zend/Session.php:454 Stack trace: #0 /kunden/.../webroots/ssl/piwik/core/Session.php(81): Zend_Session::start() #1 /kunden/.../webroots/ssl/piwik/index.php(51): Piwik_Session::start()

Interpretation:
x1 = 1, d.h. temp ist schreibbar. Das ist also nicht das Problem. Vielmehr kommt das Problem daher, dass schon eine Session offen ist.

Warum könnte das Sein? Keine Ahnung. Irgendwelche Ideen?

Ich habe das mit session.auto_start on und off versucht, keine Änderung im Verhalten.

Ich habe das gleiche Phänomen auch auf einer zweiten Piwik installation. Funktioniert die archive.sh überhaupt für irgendjemand?

archive.sh funktioniert wunderbar bei den meisten, so auch bei mir.
ZendSession scheint irgend eine Exception zu werfen und in der Fehlermeldung wird nur der wahrscheinlichste Fall ausgegeben.
Du kannst ja mal versuchen, Dir den Inhalt der Exception ausgeben zu lassen:

echo $e->getMessage();

selbe Problematik auch hier. Skript wurde mit verschiedensten Usern (root/www-data/vhost user) ausgeführt und die tmp-dirs haben alle 777. Hat nichts genützt. Sehr seltsam.
Ist hier schon jemand weitergekommen?

Hi all,

ja, ich habe mir den exception Text ja schon ausgeben lassen. Wie oben erwähnt:

exception 'Zend_Session_Exception' with message 'Session must be started before any output has been sent to the browser; 
output started in /0' in /kunden/.../webroots/ssl/piwik/libs/Zend/Session.php:454 
Stack trace: #0 /kunden/.../webroots/ssl/piwik/core/Session.php(81): Zend_Session::start() 
#1 /kunden/.../webroots/ssl/piwik/index.php(51): Piwik_Session::start()

Es ist definitiv ein Problem damit, wann von wo die Session gestartet wird. Evtl. wird schon ein Header oder sowas gesendet bevor session.start() aufgerufen wird.
Die Temp Verzeichnisse sind schreibbar, wie oben erwähnt, und in meinem vorigen Code nachgeprüft.
Das heisst im Klartext, es hat nichts mit Berechtigungen zu tun und das ganze von root aufzurufen bringt keine Änderung.
Es ist ein Session-start Problem.

session.auto_start = 1 müsste das Problem eigentlich lösen, tut es bei mir aber nicht.

Der Browser benutzt eine andere php.ini als der direkte Aufruf von der Konsole, auch das ist mir bekannt.
Habe dort session.auto_start auch auf 1 gestellt, bringt aber rein garnichts.

Freunde, bitte helft mir weiter, ich bin am verzweifeln.
Ich möchte diese Software für einen professionellen Onlineshop nutzen, aber so wird das nichts.

Grüße, Thomas

Ich bin mit diesem Problem noch nicht weitergekommen.

Auf meiner privaten Ubuntu Installation funktioniert das auf anhieb,

auf meinem DomainFactory Acount und auf einem anderen Professionellen Webhosting Account funktioniert das aus o.g. Grund nicht.

Ist irgendjemand schon mit dem Problem weitergekommen?

Grüße, Thomas

@ThomasN: Ich habe das Problem bei Domainfactory jetzt gelöst. Es liegt an PHP, ich vermute irgendein fieser Bug in Zusammenhang mit der spezifischen Umgebung bei Domainfactory.

Und zwar funktionieren Sessions grundsätzlich nicht, wenn man ein Script mit php -q auf Kommandozeile aufruft. Grund scheint die Funktion headers_sent() zu sein, die bei der Option -q immer true zurückgibt - auch wenn gar keine Header gesendet wurden.

Das Problem ließ sich bei mir nur durch eine eigens kompilierte Version von PHP lösen. Entweder bittest du die Technik darum, oder du machst es selber (wenn du einen entsprechenden SSH-Account hast).

Du brauchst:

  1. Den aktuellen PHP Sourcecode von php.net

  2. Die zlib von www.zlib.net

Dann gehst du wie folgt vor:

  1. Beides downloaden und irgendwo entpacken.

  2. Das Verzeichnis /kunden/KUNDENNUMMER/bin/php-cli erstellen.

  3. Gehe in das Verzeichnis, in das du PHP entpackt hast und kompiliere PHP wie folgt:


./configure --prefix=/kunden/KUNDENNUMMER/bin/php-cli --with-pdo-mysql --with-zlib-dir=pfad-zu-entpackter-zlib --enable-cli --disable-cgi
make
make install

Wichtig: ohne --with-pdo-mysql und --with-zlib-dir funktioniert Piwik nicht!

  1. Den Cronjob von Piwik (archive.sh) wie folgt ändern:

Vor der Zeile “act_path() {” fügst du ein:


PHP_BIN="/kunden/KUNDENNUMMER/bin/php-cli/bin/php"

Bei mir liefs danach.

Wenn du Hilfe von der Technik brauchst, schick mir ne Nachricht, dann kann ich dir die Ticketnummer geben, unter der ich das Problem mit df schon diskutiert habe. Dann kannst du dich darauf beziehen und wahrscheinlich geht es dann schneller.

Edit: natürlich muss es bei configure --disable-cgi heißen! Sorry, Tippfehler!

I’ve opened a ticket. archive.sh - doesn’t work with php-cgi · Issue #1901 · matomo-org/matomo · GitHub

This should now be fixed in http://dev.piwik.org/trac/changeset/3468 – note: it adds a new file, core/Session/Namespace.php.

wow! thanks u very much!


http://tandaiduong.com.vn - my contact!

Ich habe wegen einem Konfigurationsproblem mit Wordpress meinen Server von Apache auf FastCGI umgestellt. Seitdem läuft Wordpress korrekt, allerdings gibt Piwik den Geist auf: “Unable to start session. Check that session.save_path or tmp/sessions is writeable, and session.auto_start = 0.”

Ich habe die initiale Installation von Piwik gemacht, als der Server noch nicht auf FastCGI lief - allerdings schon mit dem aktuellen Release in dem ich die obigen Änderungen nachvollziehen kann. Muss ich Piwik nocheinmal neu installieren oder kann ich ihm beibringen, dass ab sofort FastCGI berücksichtigt werden muss?

So, habe den tmp/ folder komplett auf 0777 gesetzt, schon gehts wieder :confused:
lass ich den folder jetzt auf 0777?