Toon posts:

[Linux/Apache] nieuwe logfile schrijven zonder restart

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb voor het beheren van mijn logfiles het volgende bash script geschreven:

code:
1
2
3
4
5
6
7
8
9
#!bin/bash
DATUM=`date  +'%d-%m-%Y_%H%M'`
cd /var/log/httpd/oldlogs
mkdir $DATUM
cd ..
cd domains
mv lognaam.log /var/log/httpd/oldlogs/${DATUM}
cp /var/log/httpd/oldlogs/dummy/lognaam.log /var/log/httpd/domains
apachectl graceful


Die apachectl graceful is nodig omdat hij anders niet naar de nieuwe logfile wil schrijven (de dummy log is correct geCHMOD. Ik hoorde van iemand anders dat apache zn logfiles zelf maakt, dus ik probeerde de laatste twee regels te verwijderen, dus deze:

code:
1
2
cp /var/log/httpd/oldlogs/dummy/lognaam.log /var/log/httpd/domains
apachectl graceful


Maar dan wordt er geen logfile gecreeerd.

Mijn vraag is, is het mogelijk de logfile te verplaatsen en apache in een nieuwe te laten loggen zonder de webserver te moeten herstarten?

[ Voor 3% gewijzigd door Verwijderd op 20-07-2006 16:57 ]


  • sandz
  • Registratie: Mei 2002
  • Laatst online: 13-11-2024

Verwijderd

Topicstarter
Mogelijk, bedankt! Ik ga er naar kijken, hoewel het nog beter zou zijn als er een makkelijker functie voor was waarvoor ik mn huidige scriptje kon gebruiken.

  • igmar
  • Registratie: April 2000
  • Laatst online: 31-01 23:50

igmar

ISO20022

Euh, apache signals, of tewel :

code:
1
kill -HUP `cat /var/run/httpd.pid`

  • igmar
  • Registratie: April 2000
  • Laatst online: 31-01 23:50

igmar

ISO20022

Verwijderd schreef op donderdag 20 juli 2006 @ 16:56:
Ik hoorde van iemand anders dat apache zn logfiles zelf maakt, dus ik probeerde de laatste twee regels te verwijderen, dus deze:
Apache maakt geen logfiles, die zul je zelf, met eventueel juiste permissies aan moeten maken.

  • SpamLame
  • Registratie: Augustus 2000
  • Laatst online: 16:43

SpamLame

niks

Een file moven terwijl een proces er mogelijk in schrijft (of iig open heeft) is nooit verstandig.
Wat je in deze ook had kunnen doen is, een copie maken van je lognaam.log en dan lognaam.log truncaten.
Kun je met je gekoppieerde log doen wat je wilt, je origineel wordt geleegd en er is geen proces wat opnieuw gestart hoeft te worden.

  • deepbass909
  • Registratie: April 2001
  • Laatst online: 16:09

deepbass909

[☼☼] [:::][:::] [☼☼]

Voor zover ik weet heeft apache zelf ook de mogelijkheid om logfile-rotation aan te geven.
Bij mij krijgt apache elke nacht een nieuwe logfile, met de datum in de naam. Dit kwam standaard mee in Gentoo.

Waarschuwing, opperprutser aan het werk... en als je een opmerking van mij niet snapt, klik dan hier


  • igmar
  • Registratie: April 2000
  • Laatst online: 31-01 23:50

igmar

ISO20022

SpamLame schreef op vrijdag 21 juli 2006 @ 09:34:
Een file moven terwijl een proces er mogelijk in schrijft (of iig open heeft) is nooit verstandig.
Want ? De kernel heeft daar echt geen moeite mee.
Wat je in deze ook had kunnen doen is, een copie maken van je lognaam.log en dan lognaam.log truncaten.
Kun je met je gekoppieerde log doen wat je wilt, je origineel wordt geleegd en er is geen proces wat opnieuw gestart hoeft te worden.
Dat zal je weinig helpen, de originele file blijft dan even groot.

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

deepbass909 schreef op vrijdag 21 juli 2006 @ 09:44:
Voor zover ik weet heeft apache zelf ook de mogelijkheid om logfile-rotation aan te geven.
Bij mij krijgt apache elke nacht een nieuwe logfile, met de datum in de naam. Dit kwam standaard mee in Gentoo.
Dat doet logrotate.
igmar schreef op vrijdag 21 juli 2006 @ 09:23:
Euh, apache signals, of tewel :

code:
1
kill -HUP `cat /var/run/httpd.pid`
Kun je beter SIGUSR1 sturen, ofwel wat apachectl graceful doet.
Verwijderd schreef op donderdag 20 juli 2006 @ 16:56:
Mijn vraag is, is het mogelijk de logfile te verplaatsen en apache in een nieuwe te laten loggen zonder de webserver te moeten herstarten?
Apache maakt idd z'n eigen log files aan als ze er niet zijn. Maar om 'm dat te laten doen moet je minimaal een SIGUSR1 sturen zodat 'ie z'n log files closed en naar nieuwe begint te schrijven. Met apachectl graceful restart je apache niet, je zegt 'reload je configs en begin aan nieuwe log files'. Apache blijft in de tussentijd gewoon lekker doorserven.

[ Voor 4% gewijzigd door CyBeR op 21-07-2006 09:50 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


  • StefSybo
  • Registratie: Maart 2004
  • Niet online
SpamLame schreef op vrijdag 21 juli 2006 @ 09:34:
Een file moven terwijl een proces er mogelijk in schrijft (of iig open heeft) is nooit verstandig.
Wat je in deze ook had kunnen doen is, een copie maken van je lognaam.log en dan lognaam.log truncaten.
Kun je met je gekoppieerde log doen wat je wilt, je origineel wordt geleegd en er is geen proces wat opnieuw gestart hoeft te worden.
Het maakt niks uit als je een bestand renamed of zelfs verwijderd terwijl een proces het open heeft, het proces merkt niet eens dat je dat gedaan hebt. Dit komt door de manier waarop unix-systemen met bestanden omgaan. Een bestandsnaam is namelijk niet meer dan een verwijzing in een directory naar een bepaalde plek op de schijf waar het bestand staat (even simpel uitgelegd). Een proces opent niet die verwijzing, maar direct het bestand en dus heeft het er geen last van als de verwijzing in een map naar dat bestand verandert.
Juist als je een bestand wil truncaten terwijl een ander proces het open heeft, zoals jij voorstelt, kan je onverwacht gedrag krijgen en bijvoorbeeld logregels missen.

De normale manier om de logs van een server te rotaten is dan ook om het oude bestand te renamen, vervolgens een nieuwe aan te maken en het serverproces een SIGHUP (kill -HUP) te sturen.
Dit betekent wel dat de server geprogrammeerd moet zijn om dit signal te catchen en zijn configuratie opnieuw te lezen en de logs opnieuw te openen, maar dit is normaal bij het schrijven van daemons voor unix.

Zie ook deze /etc/logrotate.d/apache2 zoals die standaard bij Gentoo komt:
code:
1
2
3
4
5
6
7
8
9
10
11
# Apache2 logrotate snipet for Gentoo Linux
# Contributes by Chuck Short
#
/var/log/apache2/*log {
  missingok
  notifempty
  sharedscripts
  postrotate
  /etc/init.d/apache2 reload > /dev/null 2>&1 || true
  endscript
}


En de bijbehorende reload() functie uit /etc/init.d/apache2
code:
1
2
3
4
5
6
7
8
9
10
reload() {
        if ! service_started "${myservice}" ; then
                eerror "Apache is not running! Please start it before trying to reload it."
        else
                checkconfig || return 1
                ebegin "Reloading apache2"
                ${APACHE2} ${APACHE2_OPTS} -k graceful
                eend $?
        fi
}


Apache heeft dus ook zijn eigen mechanismen om zijn logs opnieuw te openen zonder downtime, maar kill -HUP begrijpt hij ook.

Iig is die apachectl -k graceful dus de juiste manier om je logs te rotaten. Daarbij wordt trouwens niet de server herstart, hij leest alleen zijn configuratie opnieuw in en hij opent de logfiles opnieuw, maar hij blijft alle requests beantwoorden.

[ Voor 18% gewijzigd door StefSybo op 21-07-2006 09:50 ]


  • Straphka
  • Registratie: Augustus 2002
  • Niet online
StefSybo schreef op vrijdag 21 juli 2006 @ 09:49:
[...]


Het maakt niks uit als je een bestand renamed of zelfs verwijderd terwijl een proces het open heeft, het proces merkt niet eens dat je dat gedaan hebt. Dit komt door de manier waarop unix-systemen met bestanden omgaan. Een bestandsnaam is namelijk niet meer dan een verwijzing in een directory naar een bepaalde plek op de schijf waar het bestand staat (even simpel uitgelegd). Een proces opent niet die verwijzing, maar direct het bestand en dus heeft het er geen last van als de verwijzing in een map naar dat bestand verandert.
Juist als je een bestand wil truncaten terwijl een ander proces het open heeft, zoals jij voorstelt, kan je onverwacht gedrag krijgen en bijvoorbeeld logregels missen.
Erhm...ja, dit klopt op zich
Een process opent een inode en bij een move blijft die gelijk.
Houd er alleen wel rekekening mee dat dit alleen geld als deze move plaatvind op dezelfde fysical disk, dus als je het bestand van /var/log/apache2/access.log moved naar /home/pietjepuk/data en je home dir staat op een andere partitie, je dan wel in de knoop komt.

Just my 2 cents

[ Voor 40% gewijzigd door Straphka op 21-07-2006 11:34 ]


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Straphka schreef op vrijdag 21 juli 2006 @ 11:33:
[...]


Erhm...ja, dit klopt op zich
Een process opent een inode en bij een move blijft die gelijk.
Houd er alleen wel rekekening mee dat dit alleen geld als deze move plaatvind op dezelfde fysical disk, dus als je het bestand van /var/log/apache2/access.log moved naar /home/pietjepuk/data en je home dir staat op een andere partitie, je dan wel in de knoop komt.

Just my 2 cents
Dan wordt de file gekopieerd naar de nieuwe partitie en de oude geunlink()ed. Daarna kan apache er nog wel naar schrijven, maar niemand kan daar nog bij. Dus ben je die logmeldingen kwijt. Dus idd niet je file naar een andere partitie moven zonder SIGUSR1 of SIGHUP. (Liefst zelfs pas moven als apache al een nieuwe gemaakt heeft).

All my posts are provided as-is. They come with NO WARRANTY at all.


Verwijderd

Topicstarter
Hmm, zo'n graceful 'restart' is dus precies wat ik wil. Prima. Nu heb ik nog een probleem waar ik niet echt uitkom. Mijn script heb ik in /usr/bin gezet en als ik hem vanuit linux draai doet ie het prima zonder problemen.

Nu heb ik in directadmin de volgende cronjob toegevoegd:
*/1 * * * * /usr/bin/logscript

Maar zo te zien wordt het log niet gedraaid?

Ik heb chmod 777 gedaan op het script, ook getest of chown diradmin / chgrp diradmin hielpen, maar nee.

Edit: Het is me gelukt door middel van crontab -e ingelogd als root een cronjob te maken.

[ Voor 11% gewijzigd door Verwijderd op 24-07-2006 03:18 ]


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

*/1 is niet nodig, kun je gewoon '*' van maken.

Oh en chmod 777 op een script dat door root uitgevoerd wordt is een heel, heel slecht idee.

[ Voor 55% gewijzigd door CyBeR op 24-07-2006 12:15 ]

All my posts are provided as-is. They come with NO WARRANTY at all.

Pagina: 1