Strona 1 z 1

Skrypt powiadamiania o przepełnionej skrzynce email w Debianie z Plesk9

: 16 września 2010, 08:07
autor: jaro74
Witam.

Może mi ktoś podpowiedzieć co z tym skryptem jest nie tak (plesk9.3 Debian 5).

Skrypt ma zadanie powiadamiać klienta o przepełnionej skrzynce.

Uruchamiając go cronem w plesk jako root mam komunikat:

Kod: Zaznacz cały

/var/www/vhosts/webinfo.pl/private/mailboxfull.sh: line 7: cd: /var/qmail/mailnames
: No such file or directory
/var/www/vhosts/webinfo.pl/private/mailboxfull.sh: line 8: syntax error near unexpected token `do
'
/var/www/vhosts/webinfo.pl/private/mailboxfull.sh: line 8: `for DIR in *.*;do
'

Katalog oczywiście istnieje.

Z góry dziękuję.

Kod: Zaznacz cały

#! /bin/sh
# warn plesk mailbox users, if mailbox exceeds quota
#
#setenv QMAILUSER 'do-not-reply'
MAILROOT=/var/qmail/mailnames
ADMINMSG=''
cd $MAILROOT > /dev/null
for DIR in *.*;do
QUOTAFILE=$MAILROOT/$DIR/@mbox.quota
# if domainquota exists
if [ -f $QUOTAFILE ]
then
DOMAINHARDQUOTA=`cat $QUOTAFILE`
DOMAINSOFTQUOTA=$((85 * $DOMAINHARDQUOTA / 100))
#echo "$DIR $DOMAINHARDQUOTA - $DOMAINSOFTQUOTA"
cd $MAILROOT/$DIR
for MAILBOX in * ;do
if [ -d $MAILBOX ]
then
# look for specific mailbox quota file and set mailbox softquota
QUOTAFILE=$MAILROOT/$DIR/$MAILBOX/@mbox.quota
#echo $QUOTAFILE
if [ -f $QUOTAFILE ]
then
HARDQUOTA=`cat $QUOTAFILE`
#echo "using specific $QUOTAFILE, $HARDQUOTA"
 
SOFTQUOTA=$((85 * $HARDQUOTA / 100))
else
#echo "using domainquota"
HARDQUOTA=$DOMAINHARDQUOTA
SOFTQUOTA=$DOMAINSOFTQUOTA
fi
# calculate space used by mailbox
MBOXSPACE=`du -ks $MAILBOX | cut -f1`
#echo "$MAILBOX@$DIR uses $MBOXSPACE"
if [ $HARDQUOTA -gt 0 -a $MBOXSPACE -gt $SOFTQUOTA ]; then
MBOXPERCENT=$(($MBOXSPACE * 100 / $HARDQUOTA))
echo "$MAILBOX@$DIR belegt $MBOXSPACE kb, Soft/Hardquota = $SOFTQUOTA kb /$HARDQUOTA kb"
 
#for testing: send warn mail to postmaster account
#mail -r do-not-reply@$DIR -s "Mailbox Quota Warnung" admin@domain << EOF
#
#regular: send warn mail to mailbox
mail -r do-not-reply@$DIR -s "Mailbox Quota Warnung" $MAILBOX@$DIR << EOF
 
 
Dear $MAILBOX
 
Your Mailbox currently uses $MBOXSPACE kb ($MBOXPERCENT %) on the mailserver. We would like to
remind you that your mailbox may only contain $HARDQUOTA kb.
 
To avoid problems when receiving new mail, you should remove read mail from the server.
 
 
Regards,
mailbox-robot
EOF
 
 
 
fi
fi
done;
 
fi
 
 
 
done;
cd /root/bin

: 16 września 2010, 14:57
autor: lun
Pierwsze co się rzuca w oczy to

Kod: Zaznacz cały

cd $MAILROOT > /dev/null
Rozumiem że /var/qmail/mailnames to plik nie katalog, dlatego pewnie masz ten komunikat na początku:

Kod: Zaznacz cały

cd: /var/qmail/mailnames : No such file or directory
Poza tym nie rozumiem co to ma robić. Jeśli chodziło Ci o wyzerowanie pliku to raczej powinno to wyglądać ciut inaczej.
W tej chwili jeśli zamieniłbyś cd na cat [o użycie czego podejrzewam Ci chodziło], to listing tego pliku przesłałbyś do /dev/null. Co w rzeczywistości nic Ci nie daje.
Jeśli chcesz wyzerować ten plik powinno to wyglądać tak:

Kod: Zaznacz cały

cat /dev/null > /var/qmail/mailnames
.

Zerkając dalej na:

Kod: Zaznacz cały

QUOTAFILE=$MAILROOT/$DIR/@mbox.quota
widać że jednak /var/qmail/mailnames ma być traktowany jak katalog.
Szczerze mówiąc, im więcej patrzę tym mniej rozumiem.
Może opisz co dana sekcja pliku ma robić, tak byłoby łatwiej.

: 16 września 2010, 19:39
autor: jaro74
Nie jestem programista ssh ale wg mnie to leci tak.
Skrypt sprawdza, czy we wszystkich podkatalogach:

Kod: Zaznacz cały

 /var/qmail/mailnames
istnieje plik:

Kod: Zaznacz cały

@mbox.quota, 
jeśli tak, to odczytuje jego zawartość. W pliku jest zapisana maksymalna wielkość skrzynki w kB.
Porównuje ten wpis z powyższych katalogów, przelicza sobie % i już dalej wysyła wiadomość do użytkownika.

A skrypt znalazłem na: http://forum.parallels.com/showthread.php?t=71666

: 17 września 2010, 17:14
autor: lun
Ja też nie jestem programistą powłokowym, ale na moje oko jeden fragment powinien wyglądać trochę inaczej.
Aktualnie jest :

Kod: Zaznacz cały

MAILROOT=/var/qmail/mailnames
ADMINMSG=''
cd $MAILROOT > /dev/null
for DIR in *.*;do
Wg mnie powinno być:

Kod: Zaznacz cały

MAILROOT=/var/qmail/mailnames
ADMINMSG=''
cd $MAILROOT
for DIR in *;do
Tego przekazania strumienia do /dev/null nie mogę zrozumieć, a do przeszukiwania katalogów wystarczy jedna gwiazdka '*'.
Cała reszta wygląda sensownie.
Spróbuj odpalić i daj znać jaki jest rezultat.

: 19 września 2010, 18:55
autor: jaro74
Witam

To samo

Dziwne, katalog istnieje.

Kod: Zaznacz cały

 
/var/www/............   mailboxfull.sh: line 7: cd: /var/qmail/mailnames
: No such file or directory
/var/www/.................mailboxfull.sh: line 8: syntax error near unexpected token `do
'
/var/www/.......................mailboxfull.sh: line 8: `for DIR in *;do
'

: 20 września 2010, 09:42
autor: lun
Dobrze, nie to żebym Ci nie wierzył, ale poproszę o wynik polecenia:

Kod: Zaznacz cały

ls -al /var/qmail | grep mailnames
Zrób również w powłoce:

Kod: Zaznacz cały

MAILROOT=/var/qmail/mailnames
cd $MAILROOT
pwd
Pamiętam, że nie tak dawno temu, był temat z podobnym problemem - gdzie skrypt nie widział folderu lub pliku (dokładnie nie pamiętam). Poszukam, pogrzebie - może to jakoś pomoże w rozwiązaniu problemu.

: 21 września 2010, 09:37
autor: jaro74

Kod: Zaznacz cały

drwxr-xr-x 17 root    root    4096 Sep 14 16:51 mailnames

: 21 września 2010, 21:48
autor: jaro74
Jeden problem rozwiązany (znak końca linii z Windowsa był).

Ale teraz jest inny problem, zmieniła się nazwa pliku i struktura, zamiast pliku:

Kod: Zaznacz cały

@mbox.quota
jest plik

Kod: Zaznacz cały

maildirsize
A to jego struktura

Kod: Zaznacz cały

4091904S,0C
     2839594          39
    -1862816           -5

Przed literą S w pierwszym wierszu jest opisana quota dla poczty
W tym przypadku 4091904 b (4MB).

Jak wyciągnąć to z pliku i podstawić do skryptu zamiast:

Kod: Zaznacz cały

@mbox.quota
Pozdrawiam.