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-ID: 657807

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

Ausgedruckt am: 20.11.2024 um 17:11 Uhr

Fenris14
Fenris14 02.03.2021 um 15:20:53 Uhr
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?
it-fraggle
it-fraggle 02.03.2021 aktualisiert um 15:32:33 Uhr
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
menace
menace 02.03.2021 um 15:36:00 Uhr
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;
godlie
godlie 02.03.2021 aktualisiert um 15:45:18 Uhr
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
erikro
erikro 02.03.2021 um 15:52:40 Uhr
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
menace
menace 02.03.2021 um 16:44:13 Uhr
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;