Hallo,
einfacher gehts mit ics_awstats, da dort das cron script gleich mitgeliefert wird
valli
Die Erweiterung AWSTATS gibt im Backend Statistiken über die Besucher der Webseite aus. Das Aktualisieren der Statistik erfolgt über den Link "Jetzt aktualisieren" im AWSTATS Modul.
Wurden die Statistiken längere Zeit nicht aktualisiert oder werden die IP-Adressen im Logfile zu Domainnamen aufgelöst, so dauert die Erstellung der Statistik unter Umständen eine ganze Weile.
Es kann daher sinnvoll sein, die Statistik z.B. stündlich automatisch zu aktualisieren, da die seit der letzten Aktualisierung hinzugekommene Datenmenge relativ klein ist.
Ich habe nach einer Möglichkeit gesucht, die Statistik mittels eines Cronjobs regelmässig upzudaten. Dazu habe ich das Modul von Rene Fritz etwas erweitert. Bei jedem Aufruf von AWSTATS im Backend von TYPO3 wird nun eine Datei "cron_script.sh" erzeugt. Diese enthält die notwendige Konfiguration, um das Perlscript von AWSTATS aufzurufen.
Die Erweiterung wurde von mir nur unter Linux getestet (unter Windows gibt es ja keine Cronjobs...).
Installation:
- die Datei index.zip herunterladen, entpacken und in das Verzeichnis site/typo3conf/ext/cc_awstats/mod1 kopieren (die dort vorhandene index.php Datei vorher sichern)
- Vom TYPO3 Backend aus das AWSTATS Modul aufrufen und die Statistik über den Link aktualisieren
- In dem oben genannten Verzeichnis steht jetzt eine Datei "cron_script.sh", diese Datei umbenennen (z.B. in "update") und mit chmod +x update ausführbar machen
- Jetzt kann in crontab folgende Zeile eingefügt werden, um die Aktualsierung einmal pro Stunde auszuführen:
('www' ist der User, unter dem der Webserver läuft, dadurch wird verhindert, dass das Skript als 'root' ausgeführt wird)Code:0 * * * * www /site/typo3conf/ext/cc_awstats/mod1/update > /dev/null
Dabei muss "site" natürlich jeweils durch den Pfad zur TYPO3-Seite ersetzt werden.
Die gemachten Änderungen werden vormutlich in künftige Versionen des AWSTATS-Moduls von Rene einfliessen.
Dank an Christian Kuhn für seine Hinweise zu Skripten und cronjobs.
Download geänderte index.php für das AWSTATS-Modul Version 0.7.1 (6.0 kB)
index.zip
© JWeiland www.jweiland.net/typo3cms/
Geändert von Junior (10.11.2006 um 11:49 Uhr)
Two hours of trial and error can save ten minutes of manual reading.
Meine neue Seite www.monot.com. Jetzt noch weicher.
Hallo,
einfacher gehts mit ics_awstats, da dort das cron script gleich mitgeliefert wird
valli
Hallo,
der thread ist zwar nicht mehr ganz jungfräulich, aber egal...
Diese erfreuliche Erfahrung mache ich augenblicklich nicht!einfacher gehts mit ics_awstats, da dort das cron script gleich mitgeliefert wird
Beim Ausführen des folgenden scripts
bekomme ich folgenden output:PHP-Code:passthru('/usr/bin/php /www/htdocs/../typo3conf/ext/ics_awstats/mod1/awstats-update.phpcron');
Perl was not running as expected. Please check the following points:
- php-'safe_mode' must not be enabled (Current configuration: safe_mode=0)
- the ics_awstats extension misconfiguration (Current configuration: perlbin=/usr/bin/perl)
- check the permissions of '/usr/bin/perl'
Die selbe Meldung bekomme ich, wenn ich das perl-script direkt aufrufe:
Vetstehen tu ich es nicht, weil ja beim manuellen update exakt der selbe scriptaufruf erfolgt und es da ja funktioniert.PHP-Code:passthru('/usr/bin/perl /www/htdocs/../typo3conf/ext/ics_awstats/awstats/awstats.pl -config=www.tralllalla.de -update');
Der safe_mode ist aus, die permissions kann ich setzen wie ich will und perl läuft ansonsten anstandslos!
Mich irritiert, dass ich nicht wirklich viel zum Thema im Netz gefunden habe, so dass ich davon ausgehe, dass es bei den meisten funktioniert!
Aber warum???
Grüße an alle
Hallo Gredini,
Wieso wird das cronscript via passthru aufgerufen?
Es ist moeglich, dass sich die php.ini in der cmdline und jene von mod_php
(respektive php-fastcgi) unterscheiden.
Lass mal folgendes in einer shell ausfuehren:
Was steht bei disable_functions, safe_mode oder aehnlichem?Code:echo '<?php phpinfo() ?>' | /usr/bin/php
Gruss valli
Hallo valli,
danke erstmal, dass Du Dich bemühst!
Es handelt sich hierbei um einen all-inkl-Webspace ohne shell-zugang und somit leider auch ohne crontabs etc. Cronjobs kann man nur in der Form aktivieren, dass man "normale" php-scripts aufruft und von dort aus eben mit exec, passthru usw. die jeweiligen shell-scripts angeht.Wieso wird das cronscript via passthru aufgerufen?
Es passt ja im prinzip auch alles, die phpinfo bringt nichts ungewähnliches, es werden mehrere irgendwas.phpsh scripte auf diese Weise aufgerufen und diverse perl-scripte laufen problemlos.
Ich verstehe nicht, wieso der Aufruf aus Typo3 selbst heraus funktionieren kann, wo der doch genauso aus php heraus mit "exec('/usr/bin/perl..." erfolgt.
grüsse
Geändert von gredini (19.05.2008 um 21:30 Uhr)
Hallo Gredini,
Geben die zwei folgenden Befehle wirklich dasselbe zurueck:Ich verstehe nicht, wieso der Aufruf aus Typo3 selbst heraus funktionieren kann, wo der doch genauso aus php heraus mit "exec('/usr/bin/perl..." erfolgt.
PHP-Code:phpinfo();
Was ich nicht verstehe ist wieso folgender Befehl ...PHP-Code:passthru('echo "<?php phpinfo() ?>" | /usr/bin/php');
folgende Meldung ausgeben kann:PHP-Code:passthru('/usr/bin/perl /www/htdocs/../typo3conf/ext/ics_awstats/awstats/awstats.pl -config=www.tralllalla.de -update');
Perl was not running as expected. Please check the following points:
- php-'safe_mode' must not be enabled (Current configuration: safe_mode=0)
- the ics_awstats extension misconfiguration (Current configuration: perlbin=/usr/bin/perl)
- check the permissions of '/usr/bin/perl'
Der Code welcher dies ausgibt, wird so naemlich gar nicht durchlaufen.
valli
Hallo valli,
die beiden phpinfo-aufrufe ergeben jeweils das gleiche.
safe_mode off, nichts disabled usw.
Ich habe das genze Prozedere jetzt nochmal durch exerziert - das war ein Fehler meinerseits - tut mir leid!!!Was ich nicht verstehe ist wieso folgender Befehl ...
folgende Meldung ausgeben kann:PHP-Code:passthru('/usr/bin/perl /www/htdocs/../typo3conf/ext/ics_awstats/awstats/awstats.pl -config=www.tralllalla.de -update');
Perl was not running as expected. Please check the following points:
- php-'safe_mode' must not be enabled (Current configuration: safe_mode=0)
- the ics_awstats extension misconfiguration (Current configuration: perlbin=/usr/bin/perl)
- check the permissions of '/usr/bin/perl'
Der Code welcher dies ausgibt, wird so naemlich gar nicht durchlaufen.
Die Meldung kommt natürlich nur beim Aufruf des update-scripts!
Und im BE steht dann bei der Auswahl des logfiles "Aktualisierung im Gange (Lösche Aktualisierungs-Sperrdatei)".
Allerdungs steht das ewig da und es wird nie was aktualisiert, weil wahrscheinlich im Anschluß daran das perl-script gestartet wird und dieses (zumindest in der update-routine) nicht läuft. Die angebliche Aktualisierungs-Sperrdatei kann ich dann löschen, worauf die Meldung wieder weg ist und dann ist wieder alles wie gehabt...
Beim direkten starten des perl-scripts kommt keine Meldung und gar nichts.
Was ich dabei schon mal generell nicht verstehe ist folgendes:
Es gibt in der class.tx_icsawstats_awstats.php zwei relevante Funktionen für den Aufruf des perl-scripts.
Für den manuellen Start aus dem BE heraus:
und für den cronjob bzw. das update-script:PHP-Code:function call_awstats($t3log, $aws_wrapper, $dbg=0) {
.
.
.
passthru($syscmd, $retval);
}
Wenn da irgendwas disabled wäre oder der safe_mode plötzlich on oder was weiss ich auch immer (was wohlgemerkt nicht der Fall ist!), dann dürften da doch beide nicht gehen!? Oder etwa doch???PHP-Code:function call_awstats_cli_update($t3log) {
.
.
.
exec($syscmd, $output, $retval);
}
![]()
Gredini
Hallo Gredini,
Kannst du mal das file mod1/class.tx_icsawstats_awstats.php wie
folgt verwuesten. In der function get_perlbin() folgendes aendern
Vorher:
Nachher:PHP-Code:...
exec($pbcmd, $testoutput, $retval);
if ($retval || (! preg_match('/^<pv>([\d\.]+)<\/pv>$/', $testoutput[0], $matches)) ) {
...
Dies gibt vielleicht ein Anhaltspunkt.PHP-Code:...
exec($pbcmd, $testoutput, $retval);
echo("pbcmd=".$pbcmd."\n");
echo("testoutput=".$testoutput[0]."\n");
echo("retval=".$retval."\n");
die();
if ($retval || (! preg_match('/^<pv>([\d\.]+)<\/pv>$/', $testoutput[0], $matches)) ) {
...
valli
PS: Findest du ein Anhaltspunkt im PHP error-log?
Hallo valli,
die Verwüstung brachte Folgendes zu Tage:
PHP-Code:pbcmd=/usr/bin/perl '/www/htdocs/../typo3conf/ext/ics_awstats/mod1/get_pv.pl' testoutput= retval=
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Lesezeichen