Shell-Script-Ausgabe per Mail verschicken

classic Classic list List threaded Threaded
11 messages Options
Reply | Threaded
Open this post in threaded view
|

Shell-Script-Ausgabe per Mail verschicken

A. Söldner
Hallo Liste,

habe ein kl. Shell-Script welches die logs der einzelnen Domainen
ausliest und mir den Traffic in MB ausgibt.

Funktioniert auch soweit. Habe mir noch einige Aliase definiert, zwecks
besserer Übersicht habe ich die Einträge aus dem Script (vorläufig)
entfernt.

Suche die Möglichkeit die Ausgabe im Script per Mail zu verschicken.

Ich bekomme es irgend wie nicht hin, scripten ist und war noch nie
"meine" Disziplin ;-)

Danke!
A.


OK, hier der (gekürzte) Code :

#!/bin/bash
#analyse_log_24Std [logdatei]
#analyse_log_24Std [logdatei] [von] [bis]

declare -A ALIASE
ALIASE['test1']="bla.bub-access.log"

log_path="/var/customers/logs/"
log_file=$1
von=$2
bis=$3

if [ ${ALIASE[$log_file]+_} ]; then log_file="${ALIASE[$log_file]}" ; fi

domains=`awk '{print substr($4, 2, 11)}' $log_path$log_file | sort | uniq`

for domain in $domains
do
# echo "$domain"
if [ -z "$von" ] && [ -z "$bis" ]
then
         sum=$(grep "$domain" $log_path$log_file | awk
'{SUM+=$10}END{print SUM/1024/1024}')
else
         jahr=${domain:7:4}
         sum=$(grep "$domain" $log_path$log_file | sed -rne
"/$jahr\:$von\:/,/$jahr\:$bis\:/ p" | awk '{SUM+=$10}END{print
SUM/1024/1024}')
#       echo $sum
fi
echo "Total bandwidth for domain  is $sum MB"
done


Reply | Threaded
Open this post in threaded view
|

Re: Shell-Script-Ausgabe per Mail verschicken

Hilmar Preuße
Am 03.04.2020 um 12:09 teilte A. Söldner mit:

Moin,

> habe ein kl. Shell-Script welches die logs der einzelnen Domainen
> ausliest und mir den Traffic in MB ausgibt.
> Suche die Möglichkeit die Ausgabe im Script per Mail zu verschicken.
>

Wo hakt es denn? Hinten noch ein

"| mailx -s Subject [hidden email]"

ran zu hängen sollte doch nicht so schwer sein.

Kannst ja erstmal ein
"echo a | mailx -s Subject [hidden email]" probieren. Wenn das
nicht geht, hast Du ein Problem im Mail-Setup.

H.
--
sigfault
#206401 http://counter.li.org


signature.asc (849 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Shell-Script-Ausgabe per Mail verschicken

A. Söldner
Hallo Hilmer, hallo Liste,

hatte ich auch schon einmal so, nur dann erhalte ich für jede Ausgabe
eine Mail.

Consolenausgabe:
Total bandwidth for 01/Apr/2020  is 3836.28 MB
Total bandwidth for 02/Apr/2020  is 2501.26 MB
Total bandwidth for 03/Apr/2020  is 701.935 MB
Total bandwidth for 30/Mar/2020  is 3096.15 MB
Total bandwidth for 31/Mar/2020  is 3564.09 MB

Die Ausgabe kann ich noch nach Zeitraum abfragen, alles Bestens.

Wie bekomme ich alle Ausgaben in eine(r) Mail?

Gruß
A.

Am 03.04.2020 um 12:20 schrieb Hilmar Preuße:

> Am 03.04.2020 um 12:09 teilte A. Söldner mit:
>
> Moin,
>
>> habe ein kl. Shell-Script welches die logs der einzelnen Domainen
>> ausliest und mir den Traffic in MB ausgibt.
>> Suche die Möglichkeit die Ausgabe im Script per Mail zu verschicken.
>>
> Wo hakt es denn? Hinten noch ein
>
> "| mailx -s Subject [hidden email]"
>
> ran zu hängen sollte doch nicht so schwer sein.
>
> Kannst ja erstmal ein
> "echo a | mailx -s Subject [hidden email]" probieren. Wenn das
> nicht geht, hast Du ein Problem im Mail-Setup.
>
> H.

Reply | Threaded
Open this post in threaded view
|

Re: Shell-Script-Ausgabe per Mail verschicken

Heiko Schlittermann (HS12-RIPE)
In reply to this post by A. Söldner
A. Söldner <[hidden email]> (Fr 03 Apr 2020 12:09:58 CEST):
> Hallo Liste,
>
> habe ein kl. Shell-Script welches die logs der einzelnen Domainen
> ausliest und mir den Traffic in MB ausgibt.

Wie wird das Script gestartet? Vom Cron? Dann bekommst Du (also der
Besitzer der Crontab) automatisch eine Mail mit den Ausgaben.

Ansonsten würde ich sowas in den Script einbauen.

test -t 1 \
|| exec &> >(mail -s "Logoutput" [hidden email])

(Ungetestet.)

> OK, hier der (gekürzte) Code :

> #!/bin/bash
set -e
export LC_ALL=POSIX
> #analyse_log_24Std [logdatei]
> #analyse_log_24Std [logdatei] [von] [bis]

> domains=`awk '{print substr($4, 2, 11)}' $log_path$log_file | sort | uniq`
… sort -u
>

> # echo "$domain"
> if [ -z "$von" ] && [ -z "$bis" ]
> then
>         sum=$(grep "$domain" $log_path$log_file | awk
> '{SUM+=$10}END{print SUM/1024/1024}')

Vielleicht "numfmt" für schönere Darstellung.


    Best regards from Dresden/Germany
    Viele Grüße aus Dresden
    Heiko Schlittermann
--
 SCHLITTERMANN.de ---------------------------- internet & unix support -
 Heiko Schlittermann, Dipl.-Ing. (TU) - {fon,fax}: +49.351.802998{1,3} -
 gnupg encrypted messages are welcome --------------- key ID: F69376CE -

signature.asc (499 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Shell-Script-Ausgabe per Mail verschicken

Hilmar Preuße
In reply to this post by A. Söldner

Am 03.04.2020 um 12:58 teilte A. Söldner mit:

Moin,

> Die Ausgabe kann ich noch nach Zeitraum abfragen, alles Bestens.
>
> Wie bekomme ich alle Ausgaben in eine(r) Mail?
>

Die for-Schleife einklammern:

{ for i in a b c d; do echo $i; done; } | mailx -s test [hidden email]

H.
--
sigfault
#206401 http://counter.li.org


signature.asc (849 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Shell-Script-Ausgabe per Mail verschicken

Heiko Schlittermann (HS12-RIPE)
Hilmar Preuße <[hidden email]> (Fr 03 Apr 2020 13:22:04 CEST):

>
> Am 03.04.2020 um 12:58 teilte A. Söldner mit:
>
> Moin,
>
> > Die Ausgabe kann ich noch nach Zeitraum abfragen, alles Bestens.
> >
> > Wie bekomme ich alle Ausgaben in eine(r) Mail?
> >
>
> Die for-Schleife einklammern:
>
> { for i in a b c d; do echo $i; done; } | mailx -s test [hidden email]
Wieso. Auch ohne die Klammern geht das. Das FOR…DO…DONE ist eine Einheit

    for i in a b c d; do echo $i; done | mailx -s test [hidden email]

--
Heiko

signature.asc (499 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Shell-Script-Ausgabe per Mail verschicken

A. Söldner
In reply to this post by Hilmar Preuße
An welcher Stelle muss ich dein Code einfügen?

Bin absolut programmier-blond :-(

Danke!

A.

Am 03.04.2020 um 13:22 schrieb Hilmar Preuße:

> Am 03.04.2020 um 12:58 teilte A. Söldner mit:
>
> Moin,
>
>> Die Ausgabe kann ich noch nach Zeitraum abfragen, alles Bestens.
>>
>> Wie bekomme ich alle Ausgaben in eine(r) Mail?
>>
> Die for-Schleife einklammern:
>
> { for i in a b c d; do echo $i; done; } | mailx -s test [hidden email]
>
> H.

Reply | Threaded
Open this post in threaded view
|

Re: Shell-Script-Ausgabe per Mail verschicken

Heiko Schlittermann (HS12-RIPE)
A. Söldner <[hidden email]> (Fr 03 Apr 2020 13:33:20 CEST):
> An welcher Stelle muss ich dein Code einfügen?
Ich würde es an den Anfang tun.

    #!/bin/bash

    set -e
    export LC_ALL=C

    test -t 1 || exec &> >(mail -s "$SUBJECT" "${RECIPIENTS[@]")

Absichtlich das setup der Mail *vor* dem set -e

> Bin absolut programmier-blond :-(

Na, so sah das aber nicht aus im Skript.

--
Heiko

signature.asc (499 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Shell-Script-Ausgabe per Mail verschicken

A. Söldner
> Bin absolut programmier-blond :-(

Na, so sah das aber nicht aus im Skript.

Erwischt ;-)

Das Script hat mir jemand gebastelt ..., wirklich, ich bin absolut
"hellblond".

Fehlermeldung:
/Scripte/test11: line 35: unexpected EOF while looking for matching `"'

Line 35 wäre:
echo  "Total bandwidth for $domain  is $sum MB""| mailx -s test [hidden email]"

Was wird gesucht: ' oder " oder ` ??

Ich hasse bash ;-)

Unten nochmal das angepasste Script.

Gruß
A.

#!/bin/bash
set -e
     export LC_ALL=C
     test -t 1 || exec &> >(mail -s "$SUBJECT" "${RECIPIENTS[@]")
#analyse_log_24Std [logdatei]
#analyse_log_24Std [logdatei] [von] [bis]
declare -A ALIASE
ALIASE['test1']="bla.bub-access.log"
log_path="/var/customers/logs/"

log_file=$1
von=$2
bis=$3

if [ ${ALIASE[$log_file]+_} ]; then log_file="${ALIASE[$log_file]}" ; fi

domains=`awk '{print substr($4, 2, 11)}' $log_path$log_file | sort | uniq`

for domain in $domains
do
# echo "$domain"
if [ -z "$von" ] && [ -z "$bis" ]
then
         sum=$(grep "$domain" $log_path$log_file | awk
'{SUM+=$10}END{print SUM/1024/1024}')
else
         jahr=${domain:7:4}
         sum=$(grep "$domain" $log_path$log_file | sed -rne
"/$jahr\:$von\:/,/$jahr\:$bis\:/ p" | awk '{SUM+=$10}END{print
SUM/1024/1024}')
#       echo $sum
fi

echo  "Total bandwidth for $domain  is $sum MB""| mailx -s test [hidden email]"
done


Am 03.04.2020 um 13:41 schrieb Heiko Schlittermann:

> A. Söldner <[hidden email]> (Fr 03 Apr 2020 13:33:20 CEST):
>> An welcher Stelle muss ich dein Code einfügen?
> Ich würde es an den Anfang tun.
>
>      #!/bin/bash
>
>      set -e
>      export LC_ALL=C
>
>      test -t 1 || exec &> >(mail -s "$SUBJECT" "${RECIPIENTS[@]")
>
> Absichtlich das setup der Mail *vor* dem set -e
>
>> Bin absolut programmier-blond :-(
> Na, so sah das aber nicht aus im Skript.
>
> --
> Heiko

Reply | Threaded
Open this post in threaded view
|

Re: Shell-Script-Ausgabe per Mail verschicken

Heiko Schlittermann (HS12-RIPE)
A. Söldner <[hidden email]> (Fr 03 Apr 2020 14:37:16 CEST):
> > Bin absolut programmier-blond :-(
>
> Na, so sah das aber nicht aus im Skript.
>
> Fehlermeldung:
> /Scripte/test11: line 35: unexpected EOF while looking for matching `"'

    " fehlt bzw ist zuviel

> Ich hasse bash ;-)

Falscher Ansatz.

>
> #!/bin/bash
> set -e
>     export LC_ALL=C
>     test -t 1 || exec &> >(mail -s "$SUBJECT" "${RECIPIENTS[@]")

Du msstest natürlich das SUBJECT und die Liste der Recipients erstmal
setzen, *vorher*

    SUBJECT="Abrechnung des letzten Monats"
    RECIPIENTS=([hidden email] [hidden email])

> #analyse_log_24Std [logdatei]

>
> echo  "Total bandwidth for $domain  is $sum MB""| mailx -s test [hidden email]"
> done

Das wäre ja dann nicht mehr notwendig, Dein Script würde ja automatisch
die Mail schicken, falls STDOUT nicht auf die Konsole geht. Und
andernfalls kommt die potentielle Mail auf die Console.

echo  "Total bandwidth for $domain  is $sum MB""| mailx -s test [hidden email]"
-----------------------------------------------^             -------------^

Die markierten Stellen sind zu viel.

--
Heiko

signature.asc (499 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Shell-Script-Ausgabe per Mail verschicken

Christian Knoke
In reply to this post by A. Söldner
A. Söldner schrieb am 03. Apr um 14:37 Uhr:

> Was wird gesucht: ' oder " oder ` ??
>
> Ich hasse bash ;-)

~$ man bash | grep -A 76 QUOTING

;-)

--
http://cknoke.de