Server Management · 8 min read · Dec 02, 2025

Estensione del Server Perfetto - Debian Squeeze [ISPConfig 3] - Pagina 4

9. Statistiche in qualsiasi momento con awstats

In questa sezione, puoi applicare una modifica che ti permetterà di aggiornare awstats ogni volta che vuoi, oppure (utilizzando cron) in intervalli di tempo più frequenti. Prima di procedere, dobbiamo cambiare il formato di log predefinito per awstats. In Debian Squeeze, il formato predefinito è 4, ma abbiamo bisogno del 1. Quindi puoi modificare il file /etc/awstats/awstats.conf o il file /etc/awstats/awstats.conf.local. Preferisco il secondo, perché mi permette di rimanere aggiornato:

nano /etc/awstats/awstats.conf.local

e aggiungi la riga: LogFormat=1

Dopo di ciò, il file dovrebbe apparire così:

# Puoi sovrascrivere le direttive di configurazione qui.  
# Questo è particolarmente utile per gli utenti con diverse configurazioni per  
# diversi server virtuali, che vogliono riutilizzare parametri comuni.  
# Inoltre, questo file non viene aggiornato con ogni nuova versione upstream.  
LogFormat=1

Ora dobbiamo copiare il cron giornaliero predefinito di ISPConfig e modificarlo … in realtà dobbiamo modificarlo MOLTO (nuovo nome file: mycron.php). Fondamentalmente dobbiamo tagliare molte righe e mantenere solo alcune di esse. Fai:

cp /usr/local/ispconfig/server/cron_daily.php /root/scripts/mycron.php
chmod 700 /root/scripts/mycron.php
nano /root/scripts/mycron.php

e incolla tutte le seguenti righe:

uses('ini_parser,file,services,getconf');  
  
#######################################################################################################  
// Crea statistiche awstats  
#######################################################################################################  
  
$sql = "SELECT domain_id, domain, document_root FROM web_domain WHERE stats_type = 'awstats' AND server_id = ".$conf['server_id'];  
$records = $app->db->queryAllRecords($sql);  
$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');  
foreach($records as $rec) {  
        $logfile = escapeshellcmd($rec['document_root'].'/log/access.log');  
        $domain = escapeshellcmd($rec['domain']);  
        $statsdir = escapeshellcmd($rec['document_root'].'/web/stats');  
        $awstats_pl = $web_config['awstats_pl'];  
        $awstats_buildstaticpages_pl = $web_config['awstats_buildstaticpages_pl'];  
        $awstats_conf_dir = $web_config['awstats_conf_dir'];  
        $awstats_website_conf_file = $web_config['awstats_conf_dir'].'/awstats.'.$domain.'.conf';  
        if(is_file($awstats_website_conf_file)) unlink($awstats_website_conf_file);  
        if(!is_file($awstats_website_conf_file)) {  
                $awstats_conf_file_content = 'Include "'.$awstats_conf_dir.'/awstats.conf"  
                LogFile="/var/log/ispconfig/httpd/'.$domain.'/access.log"  
                SiteDomain="'.$domain.'"  
                HostAliases="www.'.$domain.' localhost 127.0.0.1"';  
                file_put_contents($awstats_website_conf_file,$awstats_conf_file_content);  
        }  
 if(!@is_dir($statsdir)) mkdir($statsdir);  
  
        // awstats_buildstaticpages.pl -update -config=mydomain.com -lang=en -dir=/var/www/domain.com/web/stats -awstatsprog=/path/to/awstats.pl  
        $command = "$awstats_buildstaticpages_pl -update -config='$domain' -lang=en -dir='$statsdir' -awstatsprog='$awstats_pl'";  
  
        if($awstats_pl != '' && $awstats_buildstaticpages_pl != '' && fileowner($awstats_pl) == 0 && fileowner($awstats_buildstaticpages_pl) == 0) {  
                exec($command);  
                rename($rec['document_root'].'/web/stats/awstats.'.$domain.'.html',$rec['document_root'].'/web/stats/index.html');  
                $app->log('Statistiche awstats create con il comando: '.$command,LOGLEVEL_DEBUG);  
        } else {  
                $app->log("Nessuna statistica awstats creata. O $awstats_pl o $awstats_buildstaticpages_pl non è di proprietà dell'utente root.",LOGLEVEL_WARN);  
        }  
  
}  
  
die("finito.\n");  
?>

Questo script è un taglio del file cron predefinito di ISPConfig e si applica fino a ISPConfig 3.0.3. È stato creato da Till Brehm, e lo abbiamo modificato, in modo che la procedura di aggiornamento NON modifichi alcun file di sistema (o di log) ogni volta che lo chiamiamo. In parole semplici, lo script legge il file access.log di ciascun dominio e NON esegue alcuna rotazione o modifica, tranne che riproduce i file html per awstats. Tieni presente che il lavoro cron predefinito di ISPConfig verrà eseguito come al solito alle 00:30 e semplicemente aggiungerà al database delle statistiche e ricreerà i file html.

Nello script sopra puoi cambiare la lingua prodotta da awstats se semplicemente cambi le lettere dopo “lang=” con quelle che rappresentano il tuo paese.

Per ISPConfig 3.0.4, si prega di utilizzare il seguente codice:

uses('ini_parser,file,services,getconf');  
  
#######################################################################################################  
// Crea statistiche awstats  
#######################################################################################################  
  
$sql = "SELECT domain_id, domain, document_root FROM web_domain WHERE stats_type = 'awstats' AND server_id = ".$conf['server_id'];  
$records = $app->db->queryAllRecords($sql);  
  
$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');  
  
foreach($records as $rec) {  
        $logfile = escapeshellcmd($rec['document_root'].'/log/access.log');  
        $domain = escapeshellcmd($rec['domain']);  
        $statsdir = escapeshellcmd($rec['document_root'].'/web/stats');  
        $awstats_pl = $web_config['awstats_pl'];  
        $awstats_buildstaticpages_pl = $web_config['awstats_buildstaticpages_pl'];  
        $awstats_conf_dir = $web_config['awstats_conf_dir'];  
        $awstats_website_conf_file = $web_config['awstats_conf_dir'].'/awstats.'.$domain.'.conf';  
        if(is_file($awstats_website_conf_file)) unlink($awstats_website_conf_file);  
        $sql = "SELECT domain FROM web_domain WHERE (type = 'alias' OR AND type = 'subdomain') server_id = ".$conf['server_id'];  
        $aliases = $app->db->queryAllRecords($sql);  
        $aliasdomain = '';  
  
        if(is_array($aliases)) {  
                foreach ($aliases as $alias) {  
                        $aliasdomain.= ' '.$alias['domain']. ' www.'.$alias['domain'];  
                }  
        }  
  
        if(!is_file($awstats_website_conf_file)) {  
                $awstats_conf_file_content = 'Include "'.$awstats_conf_dir.'/awstats.conf"  
LogFile="/var/log/ispconfig/httpd/'.$domain.'/access.log"  
SiteDomain="'.$domain.'"  
HostAliases="www.'.$domain.' localhost 127.0.0.1"'.$aliasdomain;  
                file_put_contents($awstats_website_conf_file,$awstats_conf_file_content);  
        }  
  
if(!@is_dir($statsdir)) mkdir($statsdir);  
  
####################################################################################  
######################### RICREARE STATISTICHE ###########################################  
$redo = 0; // imposta questo a 1 se vuoi ricreare statistiche per un mese specifico  
$REMONTH = 11; // seleziona il mese  
$REYEAR = 2011; //seleziona l'anno  
$LANG = 'gr'; // imposta la tua lingua  
// Dopo aver impostato quanto sopra, riesegui questo script   
// e.g  
// php /path/to  
####################################################################################  
####################################################################################  
if ( $redo == 1 ) {  
  
$awmonth = $REMONTH;  
$awyear = $REYEAR;  
        $statsdirold = $statsdir."/".$awyear."-".$awmonth."/";  
        if (!is_dir($statsdirold)) {  
                mkdir($statsdirold);  
        }  
        $command = "$awstats_buildstaticpages_pl -month='$awmonth' -year='$awyear' -update -config='$domain' -lang='$LANG' -dir='$statsdirold' -awstatsprog='$awstats_pl'";  
  
        if($awstats_pl != '' && $awstats_buildstaticpages_pl != '' && fileowner($awstats_pl) == 0 && fileowner($awstats_buildstaticpages_pl) == 0) {  
               exec($command);  
               rename($statsdirold.'awstats.'.$domain.'.html',$statsdirold.'awsindex.html');  
               $app->log('Statistiche awstats create con il comando: '.$command,LOGLEVEL_DEBUG);  
        } else {  
               $app->log("Nessuna statistica awstats creata. O $awstats_pl o $awstats_buildstaticpages_pl non è di proprietà dell'utente root.",LOGLEVEL_WARN);  
        }  
}  
else {  
  if (date("d") == 1) {  
  
      $awmonth = date("n")-1;  
      $awyear = date("Y");  
  
  
        if (date("n") == 0) {  
                $awyear = date("Y")-1;  
               $awmonth = "12";  
        }  
  
        $statsdirold = $statsdir."/".$awyear."-".$awmonth."/";  
  
        if (!is_dir($statsdirold)) {  
                mkdir($statsdirold);  
                $command = "$awstats_buildstaticpages_pl -month='$awmonth' -year='$awyear' -update -config='$domain' -lang='$LANG' -dir='$statsdirold' -awstatsprog='$awstats_pl'";  
  
                if($awstats_pl != '' && $awstats_buildstaticpages_pl != '' && fileowner($awstats_pl) == 0 && fileowner($awstats_buildstaticpages_pl) == 0) {  
                        exec($command);  
                        rename($statsdirold.'awstats.'.$domain.'.html',$statsdirold.'awsindex.html');  
                        $app->log('Statistiche awstats create con il comando: '.$command,LOGLEVEL_DEBUG);  
                } else {  
                        $app->log("Nessuna statistica awstats creata. O $awstats_pl o $awstats_buildstaticpages_pl non è di proprietà dell'utente root.",LOGLEVEL_WARN);  
                }  
  
        }  
  }  
  
// ispconfig, il secondo giorno del mese, sovrascrive le statistiche create prima da questo script  
// per sovrascrivere l'esecuzione predefinita di ispconfig il secondo giorno del mese dobbiamo eseguire il codice sottostante  
  if (date("d") == 2) {  
      $awmonth = date("n")-1;  
      $awyear = date("Y");  
        if (date("n") == 0) {  
                $awyear = date("Y")-1;  
               $awmonth = "12";  
        }   
        $statsdirold = $statsdir."/".$awyear."-".$awmonth."/";  
                $command = "$awstats_buildstaticpages_pl -month='$awmonth' -year='$awyear' -update -config='$domain' -lang='$LANG' -dir='$statsdirold' -awstatsprog='$awstats_pl'";  
                if($awstats_pl != '' && $awstats_buildstaticpages_pl != '' && fileowner($awstats_pl) == 0 && fileowner($awstats_buildstaticpages_pl) == 0) {  
                        exec($command);  
                        rename($statsdirold.'awstats.'.$domain.'.html',$statsdirold.'awsindex.html');  
                        $app->log('Statistiche awstats create con il comando: '.$command,LOGLEVEL_DEBUG);  
                } else {  
                        $app->log("Nessuna statistica awstats creata. O $awstats_pl o $awstats_buildstaticpages_pl non è di proprietà dell'utente root.",LOGLEVEL_WARN);  
                }  
  }  
// fine della sovrascrittura  
// sfortunatamente quanto sopra verrà eseguito molte volte (tante quante sono le volte che esegui questo script tramite cron)  
  
       $awmonth = date("n");  
       $awyear = date("Y");  
       $command = "$awstats_buildstaticpages_pl -month='$awmonth' -year='$awyear' -update -config='$domain' -lang='$LANG' -dir='$statsdir' -awstatsprog='$awstats_pl'";  
  
       if($awstats_pl != '' && $awstats_buildstaticpages_pl != '' && fileowner($awstats_pl) == 0 && fileowner($awstats_buildstaticpages_pl) == 0) {  
                exec($command);  
                if(is_file($rec['document_root'].'/web/stats/index.html')) unlink($rec['document_root'].'/web/stats/index.html');  
                rename($rec['document_root'].'/web/stats/awstats.'.$domain.'.html',$rec['document_root'].'/web/stats/awsindex.html');  
                if(!is_file($rec['document_root'].'/web/stats/index.php')) copy("/usr/local/ispconfig/server/conf/awstats_index.php.master",$rec['document_root'].'/web/stats/index.php');  
  
                $app->log('Statistiche awstats create con il comando: '.$command,LOGLEVEL_DEBUG);  
        } else {  
                $app->log("Nessuna statistica awstats creata. O $awstats_pl o $awstats_buildstaticpages_pl non è di proprietà dell'utente root.",LOGLEVEL_WARN);  
        }  
  
} //fine redo  
} // fine foreach  
  
die("finito.\n");  
?>  

Tieni presente (nella versione >=3.0.4) che non vedrai alcuna statistica il primo giorno di ogni mese (come con lo script normale). Se vuoi vedere le statistiche aggiornate dopo la prima esecuzione il primo giorno del mese, devi leggere questo post: https://www.howtoforge.com/forums/showthread.php?p=270816#post270816

Per eseguire lo script ogni 4 ore, prima crea il file /root/scripts/mycron.sh, rendilo eseguibile e poi aggiungilo alla lista dei cronjob:

touch /root/scripts/mycron.sh
chmod 700 /root/scripts/mycron.sh
nano /root/scripts/mycron.sh

e incolla il seguente:

#!/bin/sh  
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin  
/usr/bin/php /root/scripts/mycron.php

Aggiungi il cronjob:

crontab -e

Aggiungi la seguente riga, salva ed esci:

45 0,4,8,12,16,20 * * * /root/scripts/mycron.sh

Puoi anche avviare la creazione delle statistiche in qualsiasi momento con:

/root/scripts/mycron.sh

Puoi ricreare le statistiche dei mesi precedenti (finché ci sono dati in /var/lib/awstats o /var/cache/awstats). Leggi i commenti nello script, imposta redo=1 ed esegui lo script. Maggiori informazioni su https://www.howtoforge.com/forums/showthread.php?t=51731

10. ottimizzazione di mysql

Scarica tuning-primer.sh e mysqltuner.pl. Questi ti aiuteranno a migliorare il file di configurazione di mysql.

cd /root/scripts
wget http://www.day32.com/MySQL/tuning-primer.sh
wget http://mysqltuner.com/mysqltuner.pl
chmod 700 tuning-primer.sh mysqltuner.pl

Per eseguirli:

perl /root/scripts/mysqltuner.pl
/root/scripts/tuning-primer.sh

Gli script ti faranno alcune semplici domande (utente/password) e mostreranno in rosso, i loro suggerimenti per impostazioni critiche. Puoi utilizzare i loro suggerimenti per migliorare le prestazioni del server mysql.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.