eppingen@rumms.uni-mannheim.de wrote at Wed, 08 Aug 2001 11:21:02 +0200:
Hi !
Ich fürchte, das ist in den letzten 4000 mails mal besprochen worden, die hab ich durchsucht, habs aber net mehr gefunden.
Ich würde gern irgend etwas haben, das regelmässig (cron-mässig) schaut, ob ein Verzeichnis z.B. in /var/spool/mail zu gross geworden ist, und dann eine mail an den betreffenden Benutzer schickt. Hat jemand schon sowas in Verwendung ? Oder hat jemand nen Vorschlag, wie man sowas hinbekommt ?
Ich würde liebend gerne ein Parl-Script zu dem Zweck schreiben, bin dazu aber glaubich noch nicht so richtig fähig, da mir grad net so ganz klar ist, wie ich die Bedingungen "Verzeichnis-von-user1-zu" gross mit dem Ereignis "mailannutzer1-weil-Verzeichis zu gross" verknüpfe.
Hallo, prinzipiell ganz einfach, du holst das ganze dir mit opendir in ein Array und machst dann eine schleife, wo du pro $_ ein "du" machst auf /var/spool/mail/{username}. Den Wert, den erhaeltst muss man mit einer regex versehen, dass du den tatsaechlichen Speicherbedarf als Zahl only erhaeltst. Dann kannst du fragen, ob die groesser ist, als das was du zulassen willst, und dann kannst Du das mail verschicken. Wenn Du es nicht an {username}@localhost versenden willst, dann musst du noch eine zusaetzliche Datenbank-Query machen. Ich schreibe demnaechst so ein Script, und wenn Du willst lasse kann ich es Dir senden. by bernd
Ihr Name im Internet: Domainanmeldung http://www.domainsave.at .com .net .org Domains kostenlose Anmeldung - keine Einmalgebuehr .at Domains .de Domains - innerhalb von 24 Stunden registriert.
--------------------------------------------------------- *** sent through http://www.everymail.net FREE e-mail
On Mit, 08 Aug 2001 at 14:41 (+0200), bernd@hilmar.at wrote:
eppingen@rumms.uni-mannheim.de wrote at Wed, 08 Aug 2001 11:21:02 +0200:
Ich würde gern irgend etwas haben, das regelmässig (cron-mässig) schaut, ob ein Verzeichnis z.B. in /var/spool/mail zu gross geworden ist, und dann eine mail an den betreffenden Benutzer schickt. Hat jemand schon sowas in Verwendung ? Oder hat jemand nen Vorschlag, wie man sowas hinbekommt ?
Ich würde liebend gerne ein Parl-Script zu dem Zweck schreiben, bin dazu aber glaubich noch nicht so richtig fähig, da mir grad net so ganz klar ist, wie ich die Bedingungen "Verzeichnis-von-user1-zu" gross mit dem Ereignis "mailannutzer1-weil-Verzeichis zu gross" verknüpfe.
Hallo,
prinzipiell ganz einfach, du holst das ganze dir mit opendir in ein Array und machst dann eine schleife, wo du pro $_ ein "du" machst auf /var/spool/mail/{username}. Den Wert, den erhaeltst muss man mit einer regex versehen, dass du den tatsaechlichen Speicherbedarf als Zahl only erhaeltst. Dann kannst du fragen, ob die groesser ist, als das was du zulassen willst, und dann kannst Du das mail verschicken. Wenn Du es nicht an {username}@localhost versenden willst, dann musst du noch eine zusaetzliche Datenbank-Query machen.
Ich schreibe demnaechst so ein Script, und wenn Du willst lasse kann ich es Dir senden.
Um Himmelswillen ;-) Perl ist IMHO an dieser Stelle wieder mal mit Kanonen auf Spatzen geschossen: <ungetestet> #! /bin/sh max_size=1024 for datei in /var/spool/mail/*; do size_in_kb=`du -sk $datei | cut -f1` test $size_in_kb -gt $max_size && echo "Mailbox voll" | \ mail -s "Warnung vom Postmaster" `basename $datei` done </ungetestet> In Perl könnte das dann so aussehen (ungetestet und ohne großartiges Fehlerhandling): <ungetestet> #! /usr/local/bin/perl -w opendir MDIR, "/var/spool/mail" or die "Fehler $!\n"; my @boxes = readdir MDIR; my $max_size = 1024 * 1024; foreach (@boxes) { unless (/^\.{1,2}$/) { system ("echo Mailbox voll | mail -s Warnung $_") if (stat ("/var/spool/mail/" . $_))[7] > $max_size; } } closedir MDIR; </ungetestet> Das macht in meinen Augen keinen Unterschied, was den Aufwand angeht. Jan
Hallo Am Mittwoch, 8. August 2001 21.57 schrieb Jan Trippler:
prinzipiell ganz einfach, du holst das ganze dir mit opendir in ein Array und machst dann eine schleife, wo du pro $_ ein "du" machst auf /var/spool/mail/{username}. Den Wert, den erhaeltst muss man mit einer regex versehen, dass du den tatsaechlichen Speicherbedarf als Zahl only erhaeltst. Dann kannst du fragen, ob die groesser ist, als das was du zulassen willst, und dann kannst Du das mail verschicken. Wenn Du es nicht an {username}@localhost versenden willst, dann musst du noch eine zusaetzliche Datenbank-Query machen.
Ich schreibe demnaechst so ein Script, und wenn Du willst lasse kann ich es Dir senden.
Um Himmelswillen ;-) Perl ist IMHO an dieser Stelle wieder mal mit Kanonen auf Spatzen geschossen:
<ungetestet> #! /bin/sh max_size=1024
for datei in /var/spool/mail/*; do size_in_kb=`du -sk $datei | cut -f1` test $size_in_kb -gt $max_size && echo "Mailbox voll" | \ mail -s "Warnung vom Postmaster" `basename $datei` done </ungetestet>
In Perl könnte das dann so aussehen (ungetestet und ohne großartiges Fehlerhandling):
<ungetestet> #! /usr/local/bin/perl -w
opendir MDIR, "/var/spool/mail" or die "Fehler $!\n"; my @boxes = readdir MDIR; my $max_size = 1024 * 1024;
foreach (@boxes) { unless (/^\.{1,2}$/) { system ("echo Mailbox voll | mail -s Warnung $_") if (stat ("/var/spool/mail/" . $_))[7] > $max_size; } } closedir MDIR; </ungetestet>
cool, das Perlscript funktioniert. Danke, da hat mir einer das Script gemacht, was ich schon so lange benötige. Leider kapiere ich Programmierung (auch Scriptsprachen) nicht, daher bin ich dafür wirklich dankbar. Eine kleine Frage: Wie könnte man da im Mail Zeilenumbrüche machen? So im Stil: "Deine Mailbox ist voll. Gruss Chef" Gruss Fabian
On Don, 09 Aug 2001 at 19:17 (+0200), fabian huesser wrote:
Am Mittwoch, 8. August 2001 21.57 schrieb Jan Trippler: [...]
Um Himmelswillen ;-) Perl ist IMHO an dieser Stelle wieder mal mit Kanonen auf Spatzen geschossen:
So, jetzt drehe ich ausnahmsweise mal den Spieß um und mache ein wunderschönes TO(F)U - sonst muss ich soviel neu schreiben ;-) Also, Fabian, ich schiebe Deine Antwort mal nach oben. Das ist eine Ausnahme!
cool, das Perlscript funktioniert. Danke, da hat mir einer das Script gemacht, was ich schon so lange benötige.
Und was ist mit dem Shell-Script? Ich wiederhole noch mal: Ich halte den Perl-Einsatz an dieser Stelle für überzogen - was die Shell kann, dass soll man sie auch machen lassen! Für die Kernfunktionalität nutzt das Perl-Script ja doch wieder die Shell (system). Ok, mailen kann perl auch, aber das sind dann noch ein paar Zeilen mehr. So komfortabel wie in der Shell (siehe auch das find-Script in diesem Thread) hast Du es hier in Perl nicht! Und wo wir gerade dabei sind: Die find-Kombination in einer Schleife, das ist noch ein wenig kürzer: <ungetestet> #! /bin/sh max_size=1024k find /var/spool/mail -type f -size +$max_size -print | \ while read datei; do echo -e "Deine Mailbox ist voll\n\nGruss\nJan" | \ mail -s "Warnung vom Postmaster" `basename $datei` done </ungetestet>
Leider kapiere ich Programmierung (auch Scriptsprachen) nicht, daher bin ich dafür wirklich dankbar. Eine kleine Frage: Wie könnte man da im Mail Zeilenumbrüche machen?
So im Stil: "Deine Mailbox ist voll.
Gruss Chef"
Siehe unten (die Zeilen einfach austauschen).
<ungetestet> #! /bin/sh max_size=1024
for datei in /var/spool/mail/*; do size_in_kb=`du -sk $datei | cut -f1` test $size_in_kb -gt $max_size && echo "Mailbox voll" | \
test $size_in_kb -gt $max_size && \ echo -e "Deine Mailbox ist voll\n\nGruss\nJan" | \
mail -s "Warnung vom Postmaster" `basename $datei` done </ungetestet>
In Perl könnte das dann so aussehen (ungetestet und ohne großartiges Fehlerhandling):
<ungetestet> #! /usr/local/bin/perl -w
opendir MDIR, "/var/spool/mail" or die "Fehler $!\n"; my @boxes = readdir MDIR; my $max_size = 1024 * 1024;
foreach (@boxes) { unless (/^\.{1,2}$/) { system ("echo Mailbox voll | mail -s Warnung $_")
system (qq/echo "Deine Mailbox ist voll\nGruss\n\nJan" | mail -s Warnung $_/)
if (stat ("/var/spool/mail/" . $_))[7] > $max_size; } } closedir MDIR; </ungetestet>
Jan
Hallo Jan Am Donnerstag, 9. August 2001 23.05 schrieb Jan Trippler:
So, jetzt drehe ich ausnahmsweise mal den Spieß um und mache ein wunderschönes TO(F)U - sonst muss ich soviel neu schreiben ;-) Also, Fabian, ich schiebe Deine Antwort mal nach oben. Das ist eine Ausnahme!
Ok angenommen ;-)
cool, das Perlscript funktioniert. Danke, da hat mir einer das Script gemacht, was ich schon so lange benötige.
Und was ist mit dem Shell-Script? Ich wiederhole noch mal: Ich halte den Perl-Einsatz an dieser Stelle für überzogen - was die Shell kann, dass soll man sie auch machen lassen! Für die Kernfunktionalität nutzt das Perl-Script ja doch wieder die Shell (system). Ok, mailen kann perl auch, aber das sind dann noch ein paar Zeilen mehr. So komfortabel wie in der Shell (siehe auch das find-Script in diesem Thread) hast Du es hier in Perl nicht!
das glaube ich dir gerne und leuchtet auch ein. Ich habe das Shell-Script übernommen, aber es hat nicht funktioniert. Da habe ich es halt mit dem Perlscript probiert und das rannte. Du schreibst ja _ungetestet_ und ich bewundere das, wie locker ihr das dahinschreibt. Sicher war da eine Menge Arbeit dahinter. Ich habe schon viele Anläufe genommen. Aber mir fehlt anscheinden das logische Denken, das dazu unbedingt nötig ist. Aber irgendwie habe ich doch wieder Lust bekommen - vielleicht nehme ich doch mal wieder einen Anlauf. Deine Änderungen habe ich weggeschnippselt, probiere sie gerne aus. Danke und Gruss Fabian (der vor Variablen Panik hat)
Hallo Fabian, fabian huesser wrote:
Hallo Jan
Am Donnerstag, 9. August 2001 23.05 schrieb Jan Trippler:
[snip]
Und was ist mit dem Shell-Script? Ich wiederhole noch mal: Ich halte den Perl-Einsatz an dieser Stelle für überzogen - was die Shell kann, dass soll man sie auch machen lassen! Für die Kernfunktionalität nutzt das Perl-Script ja doch wieder die Shell (system). Ok, mailen kann perl auch, aber das sind dann noch ein paar Zeilen mehr. So komfortabel wie in der Shell (siehe auch das find-Script in diesem Thread) hast Du es hier in Perl nicht!
das glaube ich dir gerne und leuchtet auch ein. Ich habe das Shell-Script übernommen, aber es hat nicht funktioniert.
dieses Problem hatte ich auch häufiger. Ich habe die entsprechenden Teile unter Windows markiert und kopiert. Dann im Terminalfenster einen vi aufgemacht und per rechter Maustaste das Script eingefügt. Ab und an liefen die Teile dann aber nicht. Ein dos2unix script.sh wirkt da manchmal Wunder! Just my 2 cent Gruß Thorsten
On Don, 09 Aug 2001, fabian huesser wrote:
Am Mittwoch, 8. August 2001 21.57 schrieb Jan Trippler:
#! /usr/local/bin/perl -w foreach (@boxes) { unless (/^\.{1,2}$/) { system ("echo Mailbox voll | mail -s Warnung $_") if (stat ("/var/spool/mail/" . $_))[7] > $max_size; } }
cool, das Perlscript funktioniert. Danke, da hat mir einer das Script gemacht, was ich schon so lange benötige. Leider kapiere ich Programmierung (auch Scriptsprachen) nicht, daher
Dann les dir mal ne Einfuehrung durch...
bin ich dafür wirklich dankbar. Eine kleine Frage: Wie könnte man da im Mail Zeilenumbrüche machen?
Da der "Body" der Mail durch das "echo ... |" (im system-Befehl) erzeugt wird: Lies 'man echo'... system("echo -e 'Mailbox voll\n\nDein\nChef\n' | ... ") Alternativ kannst du den Mailtext auch in ne Variable packen: my $msg = qq(" Mailbox voll Dein Chef "); system("echo $msg | ... ") Das ganze laesst sich aber noch verbessern, indem man mail nicht via system aufruft, sondern eine PIPE oefftet. <ungetestet> my $subject; my $mboxsize; my $msg = qq[Mailbox voll]; my $sig = qq[\n\nDein\nChef\n]; ## Hier, fuer die pipe braucht's die "" nicht! foreach(@boxes) { unless (/^\.{1,2}$/) { $mboxsize = (stat ("/var/spool/mail/" . $_))[7]; if ( $mboxsize > $max_size) { $subject = "Warnung $_"; open(MAILER, "| mail -s $subject"); print MAILER "$msg"; print MAILER "$mboxsize", "ist zu gross!\n"; print MAILER "$sig"; close(MAILER); } } } </ungetestet> -dnh -- 18. To solve an interesting problem, start by finding a problem that is interesting to you. --- Eric S. Raymond, "The Cathedral and the Bazaar"
Hallo David Am Donnerstag, 9. August 2001 23.17 schrieb David Haller:
cool, das Perlscript funktioniert. Danke, da hat mir einer das Script gemacht, was ich schon so lange benötige. Leider kapiere ich Programmierung (auch Scriptsprachen) nicht, daher
Dann les dir mal ne Einfuehrung durch...
Was meinst du wieviele Bücher ich hier habe. Und es ist nicht so, dass ich es nicht versucht hätte zu lernen. Aber ich kappier's einfach nicht - solle es ja anscheinend geben. Sobald ich mehr als ein ',$ etc. vor Augen habe, bekomme ich das Augensausen.... Aber ich könnte ja mal wieder einen Anlauf nehmen ;-) Gruss Fabian
On Fre, 10 Aug 2001, fabian huesser wrote:
Am Donnerstag, 9. August 2001 23.17 schrieb David Haller:
Leider kapiere ich Programmierung (auch Scriptsprachen) nicht, daher
Dann les dir mal ne Einfuehrung durch...
Was meinst du wieviele Bücher ich hier habe. Und es ist nicht so, dass ich es nicht versucht hätte zu lernen. Aber ich kappier's einfach nicht - solle es ja anscheinend geben.
Ahso...
Sobald ich mehr als ein ',$ etc. vor Augen habe, bekomme ich das Augensausen....
Hm. Ich meine mich zu erinnern, dass hier ein gewisser jemand namens Bernd Brodesser ziemlich lange Mails geschrieben hat, die solche Grundlagen erklaeren... Vielleicht helfen die dir ja dabei, da durchzusteigen... Achso, ja, die meisten sind IIRC schon laenger her, deswegen erwaehne ich's ja, such also mal in den letzten ca. 2 Jahren im Archiv, das Subject duerfte in den meisten Faellen wohl "bash", "shell" oder "script" enthalten haben... Auch von mir und Jan sind IIRC ein paar Schaetzchen dabei, wenn auch eher praktische Beispiele als Erklaerungen... Ansonsten, wenn's halt wirklich so ne Art "Lernblockade" bei dir ist, frag ruhig (per PM), meist (oft) hilft ne andere Art der Erklaerung weiter...
Aber ich könnte ja mal wieder einen Anlauf nehmen ;-)
Jep ;) -dnh -- Reporter (to Mahatma Gandhi): Mr Gandhi, what do you think of Western Civilization? Gandhi: I think it would be a good idea.
participants (5)
-
bernd@hilmar.at
-
David Haller
-
fabian huesser
-
Jan.Trippler@t-online.de
-
Thorsten Strusch