menace
Goto Top

Script als Cronjob ausführen

Hallo zusammen,

ich versuche aktuell die Apache Logs meines Servers per "goaccess" aufzubereiten.
hierzu habe ich folgendes Script erstellt:

#!/bin/bash

cd /var/log/apache2
zcat access.log.*.gz | goaccess access.log -o /var/www/html/report/report.html --log-format=COMBINED

Das Script parst alle access.log files (auch die per logrotation gezippten) und bereitet diese für die report.html auf.
Wenn ich das Script per ./script.sh aus der CMD aufrufe, wird dieses korrekt ausgeführt und die report.html Datei erzeugt.

Wenn ich das Script per crontab aufrufe, funktioniert dieses leider nicht mehr.
0 */3 * * * /opt/scripts/report.sh


Hat eine/r von Euch einen Tipp, wie ich das Script anpassen muss, dass dieses auch als Cronjob sauber ausgeführt wird?


Danke

Content-Key: 657807

Url: https://administrator.de/contentid/657807

Printed on: April 18, 2024 at 22:04 o'clock

Member: Fenris14
Fenris14 Mar 02, 2021 at 14:20:53 (UTC)
Goto Top
Welcher User wird verwendet?

Wenn root: Was passiert wenn du das Script aus dem root-Verzeichnis, also nicht Wurzelverzeichnis, per Crontab ausführst?
Member: it-fraggle
it-fraggle Mar 02, 2021 updated at 14:32:33 (UTC)
Goto Top
Zitat von @menace:
> #!/bin/bash
> 
> cd /var/log/apache2
> zcat access.log.*.gz | goaccess access.log -o /var/www/html/report/report.html --log-format=COMBINED
> 

Das Script parst alle access.log files (auch die per logrotation gezippten) und bereitet diese für die report.html auf.
Wenn ich das Script per ./script.sh aus der CMD aufrufe, wird dieses korrekt ausgeführt und die report.html Datei erzeugt.

Wenn ich das Script per crontab aufrufe, funktioniert dieses leider nicht mehr.
> 0 */3 * * * /opt/scripts/report.sh
> 

/bin/zcat /var/log/apache2/access.log.*.gz | /usr/bin/goaccess access.log -o /var/www/html/report/report.html --log-format=COMBINED
Member: menace
menace Mar 02, 2021 at 14:36:00 (UTC)
Goto Top
wenn ich das script per cron aus /root ausführe, erhalte ich das selbe Problem;
ich habe das Gefühl, dass der Part vom Script "zcat access.log.*.gz " im cron nicht funktioniert, da ich eine report.html Datei erhalte, in der nur die aktuellen Einträge der access.log Datei enthalten sind; die gezippten log files werden nicht geparst;
Member: godlie
godlie Mar 02, 2021 updated at 14:45:18 (UTC)
Goto Top
Hallo,

du hast einen kleinen fehler in deinem goaccess aufruf

zcat -f /var/log/apache2/access.log.* | goaccess -a -o /var/www/html/report/report.html --log-format=COMBINED

bzgl. dem Aufruf per cron wurde schon alles gesagt

der Rest ist den FAQ zu entnehmen
Member: erikro
erikro Mar 02, 2021 at 14:52:40 (UTC)
Goto Top
Moin,

Zitat von @it-fraggle:
/bin/zcat /var/log/apache2/access.log.*.gz | /usr/bin/goaccess access.log -o /var/www/html/report/report.html --log-
format=COMBINED

Das ist die Antwort. Zur Erläuterung: Wenn Du cronjobs ausführst ist $PATH in der Regel leer. Entweder setzt man den Pfad am Anfang des Skripts oder muss eben immer den vollen Pfad auf die ausführbaren Dateien angeben. Bei so kurzen Skripts macht man eher das letztere. face-wink

hth

Erik
Member: menace
menace Mar 02, 2021 at 15:44:13 (UTC)
Goto Top
danke für Eure Hilfe, mit folgender Konstellation hab ich`s zum laufen gebracht:

Script:

#!/bin/bash
/bin/zcat -f /var/log/apache2/access.log.* | /usr/bin/goaccess - -a -o /var/www/html/report/report.html --log-format=COMBINED

Crontab:

0 */3 * * * /opt/scripts/report.sh


das ausschlaggebende Stück zum Erfolg war das "-" nach goaccess, da angeblich nur so per cron der gepipte Inhalt von zcat übergeben werden kann;