bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
szefooo
Piegowaty Guziec
Piegowaty Guziec
Posty: 10
Rejestracja: 03 cze 2010, 18:46
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: Brak
Architektura: Inna

bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: szefooo »

Witam!
Chciał bym napisac skrypt który będzie pobierał z pliku a.txt pewną wartość np 400 mb. następnie sprawdzi czy ilość miejsca dostępnego na dysku nie jest mniejsza/równa tej wartości. I jeśli będzie za mało miejsca to wysle emailem wiadomośc do admina.

Troche już kombinowałem sam ale nie wiem czy dobrze:


Pobierz z pliku wpisane, 400 czyli minimum wolnego miejsca.
Zapisz ją jako zmienną a. JAK?

Kod: Zaznacz cały

(tu pewnie czegos brakuje) < plik_z_wpisana_liczba_400
I chciał bym miec w tym pliku jeszcze zapisane inne zmenne które później wykorzystam w innym celu.

Sprawdzam aktualną ilość wolnego miejsca na dysku.
df -h Pokazuje wolne miejsce na podłączonych systemach plików.
Tu znów nie wiem jak przypisać tą wartość jakiejś zmiennej b.


Sprawdzam czy wolne miejsce w systemie jest mniejsze /równe temu z pliku.
Najlepiej co pewnien odstep czasu

Kod: Zaznacz cały

if [ b -lt a ]
then
  mail -s "temat wiadomosci" mój_adres@email.com < plik_z_informacja_o_braku_miejsca
fi
Jeśli ilość wolnego miejsca jest za mała to wysyłany jest mail do którego będzie dołączony tekst z pliku (plik_z_informacja_o_braku_miejsca)

Może być też tak że wyśle jakiś tekst zapisany już w skrypcie ale nie wiem jak to napisać.
Może po prostu:

Kod: Zaznacz cały

mail -s "uwaga krytyczna ilość wolnego miejsca na dysku" mój_adres@email.com
Tak?
Awatar użytkownika
azhag
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 151
Rejestracja: 24 maja 2010, 19:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: azhag »

Kod: Zaznacz cały

#!/bin/sh
LIMIT=`cat plik`   # plik w bajtach
STAN=`df  /punkt/montowania | grep /punkt/montowania | awk '{print $4}'`

if [ "$STAN" -lt "$LIMIT" ]; then
    echo "Rany, rety, ratunku! Miejsca jest tylko:" >/tmp/mail_o_zajetym_dysku
    df -h >> /tmp/mail_o_zajetym_dysku
    mail -s "adminie kochany, miejsca nie mam" -f /tmp/mail_o_zajetym_dysku adres@example.com
    rm -f /tmp/mail_o_zajetym_dysku
fi

PS Do wysyłania e-maili z konsoli polecam raczej sendEmail.
Polski portal Debiana: http://dug.net.pl/
szefooo
Piegowaty Guziec
Piegowaty Guziec
Posty: 10
Rejestracja: 03 cze 2010, 18:46
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: Brak
Architektura: Inna

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: szefooo »

OJ
Przyznam że nie spodziewałem się aż takiego odzewu.
Dziękuję bardzo.

Zastanawaim się tylko teraz nad jedną rzeczą.

Chciał bym sobie do tego dodać taką informację:
Gdy jakikolwiek mail u mnie na poczcie będzie miał długość powyżej 500 znaków to zostanę poinformowany na inny mail.

To musiał bym z pliku gdzie mam zapisane te 400 mb wczytać też 500 znaków

w pliku zapisane

Kod: Zaznacz cały

VAR1=400
VAR2=500
i w skrypcie jakoś tak:

Kod: Zaznacz cały

#/bin/sh
. plik_ze_zmiennymi
#dostępne są już ${VAR1}, ${VAR2} ...
Ciężko mi to połączyć z tym kodem mimo wszystko.
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: beluosus »

Kod: Zaznacz cały

eval $(<plik.txt)
echo $VAR1 $VAR2
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Awatar użytkownika
azhag
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 151
Rejestracja: 24 maja 2010, 19:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: azhag »

szefooo pisze:Chciał bym sobie do tego dodać taką informację:
Gdy jakikolwiek mail u mnie na poczcie będzie miał długość powyżej 500 znaków to zostanę poinformowany na inny mail.
Nie jestem pewien czy dobrze rozumiem, ale chyba o to Ci chodzi.

Kod: Zaznacz cały

unset COS_MA_PONAD_500
for FILE in /katalog/z/emailami/*; do
    if [ `wc -m "$FILE"` -gt "$LIMIT_MAILA" ]; then
        COS_MA_PONAD_500=1
        break
    if
done

if [ -n "$COS_MA_PONAD_500" ]; then
   # co tam chcesz zrobić 
fi
Powyższy kod w pętli będzie sprawdzał z ilu znaków składają się poszczególne maile. Jeśli jakiś ma więcej niż limit, ustawi zmienną COS_MA_PONAD_500 i przerwie pętlę (bo po co kontynuować?). Dalej jeśli zmienna COS_MA_PONAD_500 ma wartość niezerową, to wykona co tam tylko zechcesz wykonać.
Polski portal Debiana: http://dug.net.pl/
szefooo
Piegowaty Guziec
Piegowaty Guziec
Posty: 10
Rejestracja: 03 cze 2010, 18:46
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: Brak
Architektura: Inna

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: szefooo »

azhag pisze: Powyższy kod w pętli będzie sprawdzał z ilu znaków składają się poszczególne maile. Jeśli jakiś ma więcej niż limit, ustawi zmienną COS_MA_PONAD_500 i przerwie pętlę (bo po co kontynuować?). Dalej jeśli zmienna COS_MA_PONAD_500 ma wartość niezerową, to wykona co tam tylko zechcesz wykonać.
Tak właśnie o to mi chodziło.
Jeszcze tylko muszę złączyć jakoś te dwie funkcje w jeden skrypt.
Zmotywowało mnie to do nauki dzisiaj.

Przeanalizowałem sobie poprzedni i kilka elementów mnie jeszcze zastanawia.

Kod: Zaznacz cały

#!/bin/sh 
zwykle uzywałem #!/bin/bash czym się to różni od sh?

Kod: Zaznacz cały

LIMIT=`cat plik` 
Wypisanie zawartości pliku ?plik? i przypisanie do zmiennej LIMIT

Kod: Zaznacz cały

STAN=`df  /punkt/montowania | grep /punkt/montowania | awk '{print $4}'`
df ? wypisywanie wolnej przestrzeni zamontowanych systemów plików
grep ? wypisywanie linii pasujących do wzorca
Używam awk aby wyświetlić tylko 4 kolumnę
| - skierowanie standardowego wyjścia do potoku, który obsłuży program trzeci
Nie bardzo rozumiem na jakiej zasadzie to działa choć wiem co robi.
Bardzo proszę o wytłumaczenie łopatologiczne.

Kod: Zaznacz cały

if [ "$STAN" -lt "$LIMIT" ]; then  
sprawdzam czy stan jest mniejsze niż limit. Jeśli tak to?

Kod: Zaznacz cały

  echo "Rany, rety, ratunku! Miejsca jest tylko:" >/tmp/mail_o_zajetym_dysku 
wyświetlam ?Rany, rety, ratunku! Miejsca jest tylko:"? i zawartość pliku ?mail o zajętym dysku?

po co sie dodaje /tmp/ ?
czy jest to potrzebne jeśli pliki będą w tym samym katalogu co skrypt?

Kod: Zaznacz cały

 df -h >> /tmp/mail_o_zajetym_dysku
df -h Pokazuje wolne miejsce na podłączonych systemach plików. I DOPISUJE je w pliku ?mail_o_zajetym_dysku?

Kod: Zaznacz cały

   mail -s "adminie kochany, miejsca nie mam" -f /tmp/mail_o_zajetym_dysku adres@example.com
Wysyłam maila na adres adres@example.com
-f sprawdzenie czy plik istnieje i jest plikiem zwykłym Co znaczy że plik jest zwykły? Nie zip nie exe tak?
W mailu jest zawartość pliku mail_o_zajetym_dysku
a "adminie kochany, miejsca nie mam" jest tematem wiadomości

Kod: Zaznacz cały

rm -f /tmp/mail_o_zajetym_dysku  
usuń plik (mail_o_zajetym_dysku)
?f nie proś o potwierdzenie wykonania rm koniec IFa
Awatar użytkownika
azhag
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 151
Rejestracja: 24 maja 2010, 19:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: azhag »

Kod: Zaznacz cały

#!/bin/sh 
zwykle uzywałem #!/bin/bash czym się to różni od sh?
#!/bin/bash uruchamia za pomocą basha, #!/bin/sh za pomocą sh (który w Linuksie jest dowiązaniem do innej powłoki, najczęściej basha, ale niekoniecznie ? np. w PLD jest to bodajże ksh, w Ubuntu chyba dash, w Debianie chyba jeszcze bash, ale wielu użytkowników zmienia na dasha, który ma być wkrótce, a może już jest?, domyślny). Jest to tzw. Shebang.

Najprościej powiedzieć, że skrypty zaczynające się od #!/bin/bash to skrypty basha, zaś od #!/bin/sh ? powłoki (tak, wiem ? bash jest powłoką, to jak z kwadratami i prostokątami).

Dla ułatwienia dorzućmy inne powłoki ? np. zsh. Skrypt zsh najpewniej (jeśli wykorzystuje konstrukcje typowe dla tej powłoki, a prawdopodobnie tak jest, bo inaczej nie ma sensu dawać takiego shebanga) może zostać wykonany tylko przez zsh. Próba wykonania go za pomocą innej powłoki zakończy się błędem.

Przykładowy skrypt zsh (właściwie funkcja z .zshrc Grmla):

Kod: Zaznacz cały

    emulate -L zsh
    autoload -U colors
    local color=$fg_bold[blue]
    integer i=0
    dirs -p | while read dir; do
        local num="${$(printf "%-4d " $i)/ /.}"
        printf " %s  $color%s$reset_color\n" $num $dir
        (( i++ ))
    done
    integer dir=-1
    read -r 'dir?Jump to directory: ' || return
    (( dir == -1 )) && return
    if (( dir < 0 || dir >= i )); then
        echo d: no such directory stack entry: $dir
        return 1
    fi
    cd ~$dir
Próba wykonania skryptu basha (znowu mówimy o takim, który wykorzystuje zapisy typowe dla tej powłoki) ma spore szanse sukces w przypadku zsh (zachowuje sporą zgodność), jednak nie jest to pewne, ale np. za pomocą dasha nie da się już tego zrobić.

Skrypty sh, nazywane czystą powłoką, powinny dać się wykonać za pomocą każdej powłoki.

Zerknij też tutaj: http://minio.jogger.pl/2009/11/21/popul ... ki/#shyzmy

W ramach ciekawostki dodam, że ja się obrażam, gdy ktoś mi mówi, że piszę w bashu. ;)

Kod: Zaznacz cały

LIMIT=`cat plik` 
Wypisanie zawartości pliku ?plik? i przypisanie do zmiennej LIMIT
Ja bym to określił raczej jako ?przypisanie do zmiennej LIMIT wyniku polecenia cat plik

Kod: Zaznacz cały

STAN=`df  /punkt/montowania | grep /punkt/montowania | awk '{print $4}'`
df ? wypisywanie wolnej przestrzeni zamontowanych systemów plików
grep ? wypisywanie linii pasujących do wzorca
Używam awk aby wyświetlić tylko 4 kolumnę
| - skierowanie standardowego wyjścia do potoku, który obsłuży program trzeci
Nie bardzo rozumiem na jakiej zasadzie to działa choć wiem co robi.
Bardzo proszę o wytłumaczenie łopatologiczne.
Po kolei:
df /punkt/montowania ? wypisuje dane o zajętości systemu plików tylko dla /punkt/montowania (po co ?męczyć? komputer o inne, skoro nas nie interesują?)
grep /punkt/montowania ? wyciąga tylko linię z /punkt/montowania (nie chcemy linii ?System plików...?)
awk '{print $4}' ? wyciągamy tylko czwartą kolumnę

| (potok) ? łączy ze sobą poszczególne polecenia (wyjście pierszego jest przekazywane na wejście kolejnego). patrz: http://programowanie-linux.wikidot.com/ ... ash:potoki

Nawiasem mówiąc popełniłem tu błąd :) ? grep jest zbędny:

Kod: Zaznacz cały

df  /punkt/montowania | awk '/\/punkt\/montowania/ {print $4}'
(ukośnik uczynił zapis nieczytelnym... konstrukcja wygląda następująco: awk '/wyrażenie/ {reszta...}')

Kod: Zaznacz cały

if [ "$STAN" -lt "$LIMIT" ]; then  
sprawdzam czy stan jest mniejsze niż limit. Jeśli tak to?
Tak.

Kod: Zaznacz cały

  echo "Rany, rety, ratunku! Miejsca jest tylko:" >/tmp/mail_o_zajetym_dysku 
wyświetlam ?Rany, rety, ratunku! Miejsca jest tylko:"? i zawartość pliku ?mail o zajętym dysku?
Nie. Zapisujesz ?Rany, rety, ratunku! Miejsca jest tylko:? do podanego pliku
po co sie dodaje /tmp/ ?
czy jest to potrzebne jeśli pliki będą w tym samym katalogu co skrypt?
Chodzi o pewną higienę. Pliki tymczasowe powinno się zapisywać w przeznaczonym do tego miejscu.

Po pierwsze nie robisz bałaganu jeśli z jakiegoś powodu plik tymczasowy nie zostanie usunięty. Po drugie nie trudno sobie wyobrazić, że nie będziesz miał w aktualnym katalogu prawa do zapisu.

Kod: Zaznacz cały

 df -h >> /tmp/mail_o_zajetym_dysku
df -h Pokazuje wolne miejsce na podłączonych systemach plików. I DOPISUJE je w pliku ?mail_o_zajetym_dysku?
Tak.

Kod: Zaznacz cały

   mail -s "adminie kochany, miejsca nie mam" -f /tmp/mail_o_zajetym_dysku adres@example.com
Wysyłam maila na adres adres@example.com
-f sprawdzenie czy plik istnieje i jest plikiem zwykłym Co znaczy że plik jest zwykły? Nie zip nie exe tak?
W mailu jest zawartość pliku mail_o_zajetym_dysku
a "adminie kochany, miejsca nie mam" jest tematem wiadomości
Tak, nie, tak.

Tak, robi to co piszesz.
Nie, plik zwykły to... no zwykły plik, czyli nie plik blokowy ani znakowy, ani katalog, ani łącze nazwane, ani link symboliczny, ani gniazdo.
Tak, wiadomość ma taką postać jak piszesz.

Kod: Zaznacz cały

rm -f /tmp/mail_o_zajetym_dysku  
usuń plik (mail_o_zajetym_dysku)
?f nie proś o potwierdzenie wykonania rm
Tak. Zawsze po sobie sprzątaj (nawet w /tmp/).
koniec IFa
Dokładnie.
Polski portal Debiana: http://dug.net.pl/
szefooo
Piegowaty Guziec
Piegowaty Guziec
Posty: 10
Rejestracja: 03 cze 2010, 18:46
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: Brak
Architektura: Inna

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: szefooo »

azhag pisze:W ramach ciekawostki dodam, że ja się obrażam, gdy ktoś mi mówi, że piszę w bashu. ;)
No to najmocniej przepraszam :)

Jeszcze tylko pytanko o te znaki "/\"

Kod: Zaznacz cały

df  /punkt/montowania | awk '/\/punkt\/montowania/ {print $4}'
Jaki jest cel ich uzycia?
Awatar użytkownika
azhag
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 151
Rejestracja: 24 maja 2010, 19:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: azhag »

szefooo pisze:Jeszcze tylko pytanko o te znaki "/\"

Kod: Zaznacz cały

df  /punkt/montowania | awk '/\/punkt\/montowania/ {print $4}'
Jaki jest cel ich uzycia?
właściwie to pytasz o znaki "\/" ;)

W awk wyrażenie "grepowane" zapisuje się pomiędzy ukośnikami. Ponieważ w tym przypadku wyrażenie również zawierało ukośniki należało je zabezpieczyć przed zinterpretowaniem jako koniec szukanego wyrażenia.

Kod: Zaznacz cały

azhag@debian /tmp $ awk '{print $0}' plik
abc
def
ghi
/jklm
/jkl/
mno
azhag@debian /tmp $ awk '/jkl/ {print $0}' plik
/jklm
/jkl/
azhag@debian /tmp $ awk '/jkl// {print $0}' plik
awk: /jkl// {print $0}
awk:        ^ syntax error
1 azhag@debian /tmp $ awk '/jkl\// {print $0}' plik
/jkl/
azhag@debian /tmp $
Polski portal Debiana: http://dug.net.pl/
szefooo
Piegowaty Guziec
Piegowaty Guziec
Posty: 10
Rejestracja: 03 cze 2010, 18:46
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: Brak
Architektura: Inna

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: szefooo »

Ok pierwszy skrypcik juz ogarniam.

Przeanalizowałem sobie ten drugi skrypt.

Dwóch rzeczy jeszcze tam nie rozumiem bo nie mogę tego znaleźć w internecie :shock:

Skrypt:

Kod: Zaznacz cały

#!/bin/sh   
To wiadomo

Kod: Zaznacz cały

LIMIT_MAILA =`cat plik_z_zapisanym_limitem`
przypisanie do zmiennej LIMIT_MAILA wyniku polecenia cat plik_z_zapisanym_limitem ( cat plik wypisz zawartość pliku)

Kod: Zaznacz cały

unset COS_MA_PONAD_500
zeruję sobie zmienną COS_MA_PONAD_500

Kod: Zaznacz cały

for FILE in /katalog/z/emailami/*; do
dla wszystkich plików w folderze ?emailami? wykonaj sprawdzenie w if
gwiazdka oznacza wszystkie pliki w bieżącym katalogu

W tym momencie się gubię bo nie wiem po co ustalam sobie zmienną FILE?
Co jest w tym momencie jej przypisane? Ilość maili znalezionych? Czy samo true że znaleziono jakieś?

Kod: Zaznacz cały

if [ `wc -m "$FILE"` -gt "$LIMIT_MAILA" ]; then
jeżeli znalezionych linii jest w którymkolwiek mailu więcej niż 500 to

wc ? zlicza znaki
co robi ?m ?
`wc -m "$FILE"` jest objęte w akcenty pojedyncz. Więc zliczy znaki ?coś ?m dla zmiennej File
$FILE dowołuję się do zmiennej FILE

Kod: Zaznacz cały

COS_MA_PONAD_500=1
Nadaj zmiennej COS_MA_PONAD_500 wartość 1

Kod: Zaznacz cały

Break
W innym przypadku przerwij działanie skryptu Tu nie wiem czy nie powinno być fi czyli koniec ifa?

Kod: Zaznacz cały

done
done czyli koniec pętli for

Kod: Zaznacz cały

if [ -n "$COS_MA_PONAD_500" ]; then
jeżeli zmienna COS_MA_PONAD_500 nie jest równa zero (czyli były za duge maile) to

Kod: Zaznacz cały

mail -s "masz mało miejsca na dysku" -f /tmp/mail_o_malej_ilosci_miejsca 
adres@example.com
wysyłam maila z informacją o tym konec drugiego ifa


Dobranoc nie śpiącym!
Awatar użytkownika
azhag
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 151
Rejestracja: 24 maja 2010, 19:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: azhag »

Kod: Zaznacz cały

for FILE in /katalog/z/emailami/*; do
dla wszystkich plików w folderze ?emailami? wykonaj sprawdzenie w if
gwiazdka oznacza wszystkie pliki w bieżącym katalogu
nie w bieżącym, a w /katalog/z/emailami/
W tym momencie się gubię bo nie wiem po co ustalam sobie zmienną FILE?
Co jest w tym momencie jej przypisane? Ilość maili znalezionych? Czy samo true że znaleziono jakieś?
No to patrz:

Kod: Zaznacz cały

azhag@debian /tmp $ for ZMIENNA in a b c d e f g h; do echo "aktualnie przerabiany element to $ZMIENNA"; done
aktualnie przerabiany element to a
aktualnie przerabiany element to b
aktualnie przerabiany element to c
aktualnie przerabiany element to d
aktualnie przerabiany element to e
aktualnie przerabiany element to f
aktualnie przerabiany element to g
aktualnie przerabiany element to h

Kod: Zaznacz cały

if [ `wc -m "$FILE"` -gt "$LIMIT_MAILA" ]; then
jeżeli znalezionych linii jest w którymkolwiek mailu więcej niż 500 to

wc ? zlicza znaki
co robi ?m ?
sprawdź: wc --help | grep -e -m

Kod: Zaznacz cały

Break
W innym przypadku przerwij działanie skryptu
Nie, przerwij pętlę for.
Tu nie wiem czy nie powinno być fi czyli koniec ifa?
Oczywiście, fi.
Polski portal Debiana: http://dug.net.pl/
szefooo
Piegowaty Guziec
Piegowaty Guziec
Posty: 10
Rejestracja: 03 cze 2010, 18:46
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: Brak
Architektura: Inna

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: szefooo »

Dlaczego nazwa katalogu ma / w nazwie?
/katalog/z/emailami/

Ja myslałęm że to akurat jest jak w windows.
Katalog "katalog" zawiera katalog "z" który zawiera katalog "emailami"

Moge to np rozdzielić tym _ ?
/katalog_z_emailami/
Awatar użytkownika
azhag
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 151
Rejestracja: 24 maja 2010, 19:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: azhag »

szefooo pisze:Dlaczego nazwa katalogu ma / w nazwie?
Bo tak się oddziela poszczególne katalogi. Po prostu. Jak projektowano Uniksa, postanowiono oddzielać katalogi za pomocą ukośnika, zapewne wzorując się na innym systemie.
Moge to np rozdzielić tym _ ?
/katalog_z_emailami/
Oczywiście że nie. To zupełnie inna lokalizacja.

Podobnie jak plik_1 i plik_2 są różnymi plikami...
Polski portal Debiana: http://dug.net.pl/
szefooo
Piegowaty Guziec
Piegowaty Guziec
Posty: 10
Rejestracja: 03 cze 2010, 18:46
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: Brak
Architektura: Inna

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: szefooo »

Ok.
Pozostała ostatnia operacja. Czyli połączenie tego w całość.

Mogę to zrobić tak?

W pliku config.txt mam zapisane:
LIMIT_DYSKU=400
LIMIT_MAILA=500

Kod: Zaznacz cały

#!/bin/sh   
. config.txt
#  Importowanie pliku config.txt
#  Mam dostepne zmienne ${ LIMIT_DYSKU }, ${ LIMIT_MAILA } 

tutaj skrypt 1 korzystający z zmiennej LIMIT_DYSKU
Nie będę potzrebował  linijki:              LIMIT_DYSKU=`cat plik`       ???

tutaj skrypt 2 korzystający z zmiennej LIMIT_MAILA
Nie będę potzrebował  linijki:              LIMIT_MAILA =`cat plik_z_zapisanym_limitem`       ???


Czy zmienne się same zaimportują i nie będę musiał juz tego nigdzie "stwierdzać że one są" zanim z nich skożystam?
Awatar użytkownika
azhag
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 151
Rejestracja: 24 maja 2010, 19:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: azhag »

szefooo pisze:Czy zmienne się same zaimportują i nie będę musiał juz tego nigdzie "stwierdzać że one są" zanim z nich skożystam?
Tak, . plik lub source plik (bashyzm!) oznacza ?wczytaj i wykonaj plik?. Tak jakbyś miał ich treść wpisaną w powyższy skrypt.

Nawiasem mówiąc ponieważ plik konfiugracyjny jest wykonywany, nie jest to zbyt bezpieczna metoda wczytywania ustawień (łatwo sobie wyobrazić, że nieuważny użytkownik wpisze go niego coś destrukcyjnego). Dlatego lepiej jest zastosować podobną konstrukcję: http://hag-linux.eu.org/browser/trunk/r ... ev=83#L196 (linie 196-208).
Polski portal Debiana: http://dug.net.pl/
szefooo
Piegowaty Guziec
Piegowaty Guziec
Posty: 10
Rejestracja: 03 cze 2010, 18:46
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: Brak
Architektura: Inna

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: szefooo »

Wyskakują jeszcze byczki.

Kod: Zaznacz cały

df: `/punkt/montowania': No such file or directory
df: no file systems processed
[: 16: Illegal number: 
wc: /katalog/z/emailami/*: No such file or directory
[: 32: -gt: unexpected operator
Nie wiem za bardzo jak ustawić ten punkt montowania.
Moze zadam durne pytanie ale w sumie kto pyta nie błądzi.
Czy jesli narazie kożystam z live cd to też jest ustawiany punkt montowania?


-gt: unexpected operator

dlaczego?
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: beluosus »

Na wstępie od razu napiszę, że dostałeś niemal gotowe źródło i nie pofatygowałeś się ustawić w nim podstawowych zmiennych. Aż żal komentować. Może przeczytaj chociaż jakiś krótki kurs bash'a zanim zaczniesz w nim coś pisać, bo widać tutaj kompletny brak podstaw nie tylko języka ale również Linuksa.
df: `/punkt/montowania': No such file or directory
W miejsce "/punkt/montowania" masz wpisać gdzie jest zamontowany system plików o którym chcesz uzyskać informacje. Wydaj polecenie "df" bez argumentów i w ostatniej kolumnie wydrukuje owe punkty montowania.
wc: /katalog/z/emailami/*: No such file or directory
J/w... :/ Tu masz wpisać katalog w którym są e-maile.
[: 16: Illegal number:
Zapewne źle skonstruowałeś instrukcję warunkową if. Powinno być:

Kod: Zaznacz cały

if [ ARG1 -xx ARG2 ]
Gdzie xx to oczywiście warunek (ge, lt, eq...), a oba ARGumenty w Twoim przypadku powinny być liczbą całkowitą, a nie są. Wyświetl oba (np. poleceniem echo), aby sprawdzić, który powoduje błąd.
[: 32: -gt: unexpected operator
To oznacza, że powinno coś być przed -gt. Zapewne masz tam wpisaną zmienną, która jest pusta.
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Awatar użytkownika
azhag
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 151
Rejestracja: 24 maja 2010, 19:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: azhag »

Problemy przy [ wynikają z błędów przy /punkcie/montowania oraz /katalogu/z/emailami. Jeśli je zamienić na właściwe ścieżki, znikna.
Polski portal Debiana: http://dug.net.pl/
szefooo
Piegowaty Guziec
Piegowaty Guziec
Posty: 10
Rejestracja: 03 cze 2010, 18:46
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: Brak
Architektura: Inna

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: szefooo »

Ok to przy if już znalazłem.
Miałem tam niepotrzebna spację.

Sory że tak mieszam.
Chętnie bym się zapoznał z wszystkim po kolei ale czas goni.

Na zajęciach podano mi kilka przykładów a na zaliczeniu jest wymagane duzo więcej.
I sie człowiek gubi jak ma na to kilka dni.

Pewnie sam bym to napisał ale by mi to zajęło z 2 miesiące :) zanim bym poznał podstawy i poeksperymentował.

Więkie dzieki za pomoc. Przyznam szczerze że na żadnym forum jeszcze nie spotkałem się z tak pomocnymi uzytkownikami.

PS. Dostaliście piątkę.
Awatar użytkownika
azhag
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 151
Rejestracja: 24 maja 2010, 19:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: bash - Jak powiadomić admina serwera mailem o małej ilości miejsca na dysku?

Post autor: azhag »

Praca domowa? azhag, ty frajerze...
Polski portal Debiana: http://dug.net.pl/
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 10 gości