Variablen in logrotate

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
mopsy
Beiträge: 39
Registriert: 21.03.2009 12:26:23

Variablen in logrotate

Beitrag von mopsy » 27.08.2009 01:14:46

Hi,

ich möchte die Statistiken von AWStats täglich erstellen lassen und hab mir dafür ein Script gebastelt und in /etc/logrotate.d/apache2 eingefügt. Manuell auf der Konsole gestartet läuft das Script fehlerfrei durch, aber per Cron passiert nichts, auch keine Fehler in den Logs.

Hier mal das Script:

Code: Alles auswählen

/var/log/apache2/*.log {
        weekly
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 644 root adm
        sharedscripts
        postrotate
                if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
                        /etc/init.d/apache2 reload > /dev/null
                fi
        endscript
}
/var/www/web*/logs/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 644
sharedscripts
postrotate
if [ -f /var/run/apache2.pid ]; then
/etc/init.d/apache2 restart > /dev/null
fi
query='SELECT web FROM domains WHERE awstats = "1";'
TIMESTAMP=$(date "+%Y/%m")
tmpfile=$(tempfile)
echo "use DBNAME; " | mysql -s -u USER -pPASS -h HOSTNAME >>$tmpfile

for i in `cat "${tmpfile}"`
do
if [ ! -d /var/www/web${i}/awstats/${TIMESTAMP} ]
then
mkdir -p /var/www/web${i}/awstats/${TIMESTAMP}
echo "<a href="${TIMESTAMP}/awstats.web${i}.html">AWstats-Statistik f&uuml;r $(date "+%B %Y")</a></br></br>" >> /var/www/web${i}/awstats/index.htm
fi
perl /usr/lib/cgi-bin/awstats_buildstaticpages.pl -update -config=web${i} -lang=de -awstatsprog=/usr/lib/cgi-bin/awstats.pl -dir=/var/www/web${i}/awstats/${TIMESTAMP}
chown -R web${i}:web${i} /var/www/web${i}/awstats
find /var/www/web${i}/awstats -type f -exec chmod 640 "{}" \;
find /var/www/web${i}/awstats -type d -exec chmod 750 "{}" \;
done
rm ${tmpfile}
endscript
}
Gruß Stephan

dirkolus
Beiträge: 8
Registriert: 21.12.2007 10:15:36
Wohnort: Würmtal

Re: Variablen in logrotate

Beitrag von dirkolus » 28.08.2009 11:09:21

Ohne jetzt irgendwas genauer untersucht zu haben: Vielleicht ist es kein Problem vom Script, sondern von cron? Brauchst Du irgendwo irgendwelche Umgebungsvariablen oder so? $PATH ...?

Dk

mopsy
Beiträge: 39
Registriert: 21.03.2009 12:26:23

Re: Variablen in logrotate

Beitrag von mopsy » 28.08.2009 11:26:49

Moin,
Brauchst Du irgendwo irgendwelche Umgebungsvariablen oder so? $PATH ...?
Nicht das ich wüsste, das Script habe ich komplett eingefügt, ist aber eigentlich nicht weiter aufregend. Ich mache nur einen MySQL Select und schreibe das Ergebnis in eine Tempdatei die dann weiterverarbeitet wird.
Hat man - wenn per Cron gestartet - irgendwelche Einschränkungen zu beachten?

Gruß Stephan

dirkolus
Beiträge: 8
Registriert: 21.12.2007 10:15:36
Wohnort: Würmtal

Re: Variablen in logrotate

Beitrag von dirkolus » 28.08.2009 11:36:09

Naja, es werden halt keine oder nur sehr wenige Umgebungsvariablen eingelesen. Deswegen sollte der cron-Eintrag immer absolute Aufruf-Pfade enthalten oder Du probierst mal einen Aufruf mit

Code: Alles auswählen

source /root/.bashrc; /start/my/script 
oder so. Schau einfach mal, ob cron überhaupt funktioniert ;)

mopsy
Beiträge: 39
Registriert: 21.03.2009 12:26:23

Re: Variablen in logrotate

Beitrag von mopsy » 28.08.2009 11:47:10

Grundsätzlich laufen Cron Scripte problemlos wenn Du das meinst.

root@test:/# source /root/.bashrc; /etc/logrotate.d/apache2
-bash: /etc/logrotate.d/apache2: Permission denied

dirkolus
Beiträge: 8
Registriert: 21.12.2007 10:15:36
Wohnort: Würmtal

Re: Variablen in logrotate

Beitrag von dirkolus » 28.08.2009 11:52:10

Sorry, ich meinte: der Eintrag in die Crontab sollte lauten

Code: Alles auswählen

* * * * * source /root/.bashrc; /start/my/script
Und nein, ein permission denied sollte auch nicht auftreten.

Wenn's das dann nicht ist, ist schonmal eine Fehlerquelle ausgeschaltet.

Dirk

Antworten