Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 1267

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>Virtual Services Howto: Syslogd</TITLE>
<LINK HREF="Virtual-Services-HOWTO-7.html" REL=next>
<LINK HREF="Virtual-Services-HOWTO-5.html" REL=previous>
<LINK HREF="Virtual-Services-HOWTO.html#toc6" REL=contents>
</HEAD>
<BODY>
<A HREF="Virtual-Services-HOWTO-7.html">Avanti</A>
<A HREF="Virtual-Services-HOWTO-5.html">Indietro</A>
<A HREF="Virtual-Services-HOWTO.html#toc6">Indice</A>
<HR>
<H2><A NAME="s6">6. Syslogd</A></H2>

<H2><A NAME="ss6.1">6.1 Problema</A>
</H2>

<P>Syslogd &egrave; il programma utilit&agrave; di registrazione dei messaggi
dei servizi tipicamente utilizzato sui sistemi UNIX. Syslogd &egrave; un
demone che apre un file speciale chiamato FIFO. Una FIFO &egrave; un file
speciale che si comporta come una `pipe'. Tutto ci&ograve; che viene mandato
sul lato scrittura uscir&agrave; sul lato lettura. Ci sono delle funzioni C
che scrivono sul lato scrittura. Se un programma utilizza tali funzioni C
l'output verr&agrave; mandato al syslogd.
<P>
<P>Ci si ricordi che si &egrave; impostato un ambiente <CODE>chroot</CODE> e
che la FIFO da cui syslogd sta leggendo (/dev/log) non &egrave; presente.
Questo significa che [in assenza di opportune modifiche N.d.T.] a syslogd
non giungeranno i messaggi provenienti dagli ambienti virtuali.
<P>
<H2><A NAME="ss6.2">6.2 Soluzione</A>
</H2>

<H3>Impostare dei link</H3>

<P> 
Syslogd &egrave; in grado di utilizzare una FIFO differente se
specificata sulla riga di comando:
<P>
<PRE>
syslogd -p /virtual/log
</PRE>
<P>Poi si colleghi con un link simbolico /dev/log a /virtual/log con: 
<P>
<PRE>
ln -sf /virtual/log /dev/log
</PRE>
<P>Infine si colleghino con hard link tutte le copie di /dev/log a questo
file con: 
<P>
<PRE>
ln -f /virtual/log /virtual/domain1.com/dev/log 
</PRE>
<P>Lo script virtfs soprariportato fa gi&agrave; tutto questo. Dato che
/virtual si trova su un unico disco e i file /dev/log sono collegati con
hard link, essi hanno lo stesso numero di inode e puntano agli stessi dati.
<CODE>Chroot</CODE> non pu&ograve; impedirlo, cos&igrave; ora tutti i /dev/log
virtuali funzioneranno. Si noti che tutti i messaggi provenienti dai vari
ambienti virtuali verranno registrati assieme. &Egrave; possibile comunque
ideare programmi separati per filtrare le informazioni che interessano. 
<P>
<H3>Syslogd.init</H3>

<P>Questa versione di syslogd.init effettua un hard link a /dev/log ad ogni
suo avvio poich&eacute; syslogd cancella e crea la FIFO /dev/log ad ogni
sua nuova esecuzione. Ecco una versione modificata del file syslogd.init:
<P>
<PRE>
#!/bin/sh

. /etc/rc.d/init.d/functions

case "$1" in
  start)
        echo -n "Ora viene fatto l'hard link a dev log: "
        ln -sf /virtual/log /dev/log
        echo done
        echo -n "Lancio dei demoni di log di sistema: "
        daemon syslogd -p /virtual/log
        daemon klogd
        echo
        echo -n "Ora viene fatto il link dei dev log virtuali: "
        for i in /virtual/*
        do
                if [ ! -d "$i" ]
                then
                        continue
                fi
                if [ "$i" = "/virtual/lost+found" ]
                then
                        continue
                fi
                ln -f /virtual/log $i/dev/log
                echo -n "."
        done
        echo " done"
        touch /var/lock/subsys/syslogd
        ;;
  stop)
        echo -n "Arresto dei demoni di log di sistema: "
        killproc syslogd
        killproc klogd
        echo
        rm -f /var/lock/subsys/syslogd
        ;;
  *)
        echo "Impiego: syslogd {start|stop}"
        exit 1
esac

exit 0
</PRE>
<P>
<H2><A NAME="ss6.3">6.3 Syslogd multipli</A>
</H2>

<H3>Uno per disco</H3>

<P>Se c'&egrave; carenza di spazio in un filesystem e bisogna suddividere i
domini virtuali su pi&ugrave; dischi, ci si ricordi che gli hard link non
funzionano tra dischi diversi. Questo significa che bisogner&agrave;
lanciare un syslogd distinto per ogni gruppo di domini di un disco.
Ad esempio, se ci fossero tredici domini su /virtual1 e quindici su
/virtual2, si dovrebbero collegare tramite hard link i tredici domini a
/virtual1/log e lanciare un syslogd con <CODE>syslogd -p /virtual1/log</CODE>,
poi collegare con hard link gli altri quindici domini a /virtual2/log e
lanciare un altro syslogd con <CODE>syslogd -p /virtual2/log</CODE>.
<P>
<H3>Uno per dominio</H3>

<P>Se si preferisce non accentrare i log in un unico posto &egrave; possibile
lanciare un syslogd per dominio. Questo metodo comporta uno spreco di
risorse di sistema (ci sono pi&ugrave; processi attivi), quindi non lo
raccomando, ma &egrave; pi&ugrave; facile da implementare di quello
precedente. &Egrave; necessario modificare il file syslogd.init
affinch&eacute; il syslogd venga mandato in esecuzione con
<CODE>chroot /virtual/domain1.com syslogd</CODE> e questo per ciascun dominio.
Cos&igrave; facendo ogni syslogd verr&agrave; eseguito all'interno
dell'ambiente di <CODE>chroot</CODE> e i log dei vari ambienti virtuali si
troveranno singolarmente in /virtual/domain1.com/var/log piuttosto che
tutti assieme in un solo /var/log. Non bisogna dimenticare di lanciare un
<CODE>syslogd</CODE> normale per il sistema principale e un demone di log del
kernel <CODE>klogd</CODE>.
<P>
<HR>
<A HREF="Virtual-Services-HOWTO-7.html">Avanti</A>
<A HREF="Virtual-Services-HOWTO-5.html">Indietro</A>
<A HREF="Virtual-Services-HOWTO.html#toc6">Indice</A>
</BODY>
</HTML>