Apache logok letoltese hosting szerverrol (shell script porblema)

Fórumok

Adott egy hosting site, 1000+ domainnel. Mindegyiknek kulon apache.log, 365 napra visszamenoen. A fonokom azt szeretne, hogy
1. toltsuk le az osszes logot, datummal ellatva es a domainnek megfeelo konyvtarba
2. a logrotate tovabbra is rotalja, egy ev utan kuka, de nalunk legyen meg a mentes.

Ha nem kellene a datum a logokba, akkor egyszerubb lenne, wget a kliensen es find a szerveren, ami kirakja egy kulon konyvtarba mondjuk.

Van valakinek otlete? Tehat, megegyszer
/host/xy.hu/log/*
/host/zx.hu/log/*
.
.
.
stb

A "log" konyvtarakban naponta valtozo logok, tehat a wget -c sem a legjobb. (masnap mar a log.100.gz ugye log.101.gz nevre fog hallgatni)

Hozzászólások

Átirányítás nem megy wget-en keresztül?
...mert akkor lehetne egy php-val generált fájlt tölteni, ami átirányit
a dátum szerint és elnevezi a fájlt.
Pl.:


<html><head>
<title>Átirányítás</title>
<META http-equiv="refresh" content="0; url=http://111.222.333.444/valami.txt">
</head>
</html>

logrotateben postrotate scriptbe cp domain.1.log domain.$(date +%Y%m%d).log ?

Koszi, ez lesz. Addig is, a helyes find parancs:
for i in *
do
find /host/$i/logs -name "*.log.1" >> biba.txt
done

Aztan a biba txt-ben mar benne van eleresi uttal egyutt az osszes friss log (mar ha a logrotate utan futtatom)

Most megprobalom ezt feldolgoztatni, hogy a konyvtar nevebol (ami $i volt elobb) es a file datumabol vegye a file nevet....

Javitom, ez a find helyes kimetet genereal :)
for i in *
do
find /host/$i/logs -name "*.log.1" -printf "%h/%f/%AY%Am%Ad\n" >> xx
done

Es igy ez lesz a kimenet:
/hosting/biba.hu/logs/naplo1-error.log.1/20080802
/hosting/biba.hu/logs/naplo1-access.log.1/20080806
/hosting/kisbiba.hu/logs/naplo1-error.log.1/20080805
/hosting/kisbiba/logs/naplo1-access.log.1/20080806

Bar, azt sose tudom, hogy a file 3 ideje kozul melyik a fontos.
Ezt most az Access, de lehetne Create vagy Modified is. Utananezek.

Na, megint haladtam. Most mar viszont eros script gondom van. Megprobalom beidezni:


cd /host
for i in *
do
find /host/$i/logs -name "*.log.1" -printf "%h/%f/%CY%Cm%Cd\n" \
| cp $(awk -F/ {'print "/"$2"/"$3"/"$4"/"$5'}) /home/celtic/tmp/$(awk -F/ {'print $2".log"'})
done 

Az elso awk jo, a masodik viszont nem...Egyszeruen a "/home/celtic/tmp/" konyvtarba pakolja, atnevezes nelkul, az elso awk-ban megadott nevvel...Ha kihagyom az eleresi utat, akkor meg felul akarja magat irni.

Otlet?

Update:
Egy regebbi topic alapjan volt eg yilyen otletem is:


while read
do
a=`awk -F/ {'print "/"$2"/"$3"/"$4'}`
b=`awk -F/ {'print $3"."$5"."$6".log"'}`
echo $a $b
done < /home/celtic/tmp/xx

Itt $a erteke megfelelo, de $b megint nem jo...

Hogyan lehetne megcsinalni, hoyg egy file tobb soran elvegezni ugyanazt az awk muveletet?

A jövőre nézve syslog-ng -t javaslom, azzal tök jól lehet bele dátumot tenni. A logolás mehet egy fileba, csak a logformattal tedd be a vhost nevet és utána szét lehet szedni.

Miért nem oldható meg? A helyi gépen megy a syslog-ng és mondasz neki filenevet jól. Nagyon okos ám én adnék neki egy próbát, mert valszin a legkisebb szívást azzal fogod elérni és később is jól bővíthető. Nekünk alapjáraton kb. napi 2 millió hit megy (ha nincs vmi külön kampányos szezonális téma) syslog-ng-be, külön logszerverre.

Nemnem. Ez ennel bonyolultabb. Tudod, a ket tuz esete:
A. fonok (mellesleg rendszergazda, en a beosztottja vagyok) azt mondja, hogy nem kell ilyen, nagy helyet foglal meg minden, tehat ne csinaljam.
B. fonok (ugyvezeto) meg azt mondja, hogy kell Neki, tehat csinaljam meg.
C. beosztott (en) pedig csinalna is meg nem is.
Ebbol kovetkezik, hoyg a logolasi mechanizmuson nem valtoztathatok, az marad ugy, ahoyg van, viszont az eddig elkeszult (es ezutan elkeszulo) logokat szepen lementem az eddigi formatumban.

és olvasási jog a saját log könyvtárára, és egy sym link a mappájába? (nem értek hozzá, csak ötlet)

Kicsit perverz modon, igy sikerult megoldani:
(Keretik nem karomkodni, tudom, nagyon csunya, de legalabb mukodik)


mkdir /tmp/celtic
cd /host
for i in *
do
find /host/$i/logs -name "*.log.1" -printf "%h/%f/%CY%Cm%Cd\n" 2>/dev/null | \ 
awk -F/ '{print $3"_"$5"_"$6}' >> /tmp/logkeszito1
done
awk -F_  '{print "cp -p /host/"$1"/logs/"$2 " /tmp/celtic/"$1"_"$3"_"$2}' \ /tmp/logkeszito1 > /tmp/log.sh
sh /tmp/log.sh
cd /tmp
tar -zcf `date +%y%m%d`log.tar.gz /tmp/celtic
rm /tmp/logkeszito1
rm /tmp/log.sh
rm -fr /tmp/celtic/*
rmdir /tmp/celtic
mv /tmp/`date +%y%m%d`log.tar.gz /home/celtic/logok
exit 0

Aztan onnan mar egy wget paranccsal leszedem.
Meglatom, mekkora lesz a merete, es egy masik find-dal torlom a "/home/celtic/logok" konyvtarbol az X napnal regebbi logokat, mondjuk egy hetig marad. Egy het alatt biztos, hogy leszedi a masik gep. (szabi, nethiany, anyamtyukja jon is kozbe).
A backup gepen meg maradhatnak korlatlan ideig, ha a wincsi birja.

Jo, hat 30M egy napi log tar.gz-ben, szoval elmegy :)