Strona 1 z 1

skrypt wysyłający wiadomości do użytkowników Windowsa (bash i samba)

: 12 maja 2010, 13:44
autor: sector
Sprawa wygląda tak. Mam taki skrypt i do czasu aż nie zrobiłem aktualizacji samby, to działał jak złoto. Natomiast po aktualizacji już nie działa. Monitoruje on UPS-sa oraz zasilanie. W zależności do tego co się dzieje wysyła wiadomość do wszystkich w sieci że zanika zasilanie (nie ma napięcia zasilania/już jest napięcie zasilania).

Kod: Zaznacz cały

failtime=+5    # shutdown delay from initial power failure
btrytime=now    # shutdown delay from low-battery warning

failmsg="Uwaga! Brak napiecia w sieci energetycznej - uruchomiono zasilanie awaryjne. Prosze zapisac otwarte dokumenty!"
btrymsg="Uwaga! Akumulatory zasilania awaryjnego wyczerpane. Prosze wylaczyc komputer!"
okaymsg="Uwaga! Przywrocono zasilanie zewnetrzne - z sieci energetycznej lub generatora."


sdnotify=15    # maximum time shutdown that sends notices
logprio="daemon.warn"    # facility.level for logger program
program=ups
#`basename $0`


# Set the path.
PATH=/sbin:/etc:/bin:/usr/bin

# Set location of file containing PID of running shutdowns
spidpath=/var/run/shutdown.pid

# Set location of UPS status
upspath=/etc/ups-status

date 

send_message () {
    
    echo ${@} | wall
    
    LISTA="$(smbtree --user=GUEST% | grep -v ARTEMIS |grep -v BMS | grep -v "\\$" |grep -v "NT_STATUS" |grep -v "timeout" |grep -v "cli"|grep -v "Error" |awk {'print $1'})"
    
    for host in ${LISTA}
    do
    
        host=$(echo ${host} |sed s/\\\\//g)
        #    echo ${host}
            echo "${@}" | smbclient -M ${host} 
        
    done
}

# See what happened.
case "$1" in


    #start
    1)
    # Called with a powerfail event, check to see if a shutdown is running
    echo "${failmsg}" | wall
    logger -i -p $logprio -t "$program" "$failmsg"
    send_message ${failmsg}
    echo "fail" >$upspath
    ;;


    #now
    3)
    # Called with a powerfail event, check to see if a shutdown is running
     echo "${btrymsg}" | wall
    logger -i -p $logprio -t "$program" "$btrymsg"
    send_message ${btrymsg}
    echo "now" >$upspath
    ;;


    #stop
    2)
    # Ok, power is good again. Say so on the console.
    echo "${okaymsg}" | wall
        logger -i -p $logprio -t "$program" "$okaymsg"
    send_message ${okaymsg}    
    rm -f $upspath
       ;;


    restart|force-reload)
    # This is just here to avoid lintian errors
    ;;


    *)
    echo "Usage: /etc/init.d/powerfail {start|now|stop}"
    echo " 1: shutdown in $failtime minutes due to power failure"
    echo " 3:   shutdown NOW due to eminent UPS battery failure"
    echo " 2:  cancel shutdown because power is back online"
    exit 1
    ;;


esac


exit 0
W poprzedniej wersji smbtree pokazywało wszystkich użytkowników i każdy z nich otrzymywał wiadomość. W tej wersji o dziwo, jeśli miałem uruchomiony vmware to tylko pokazywało mi mój wirtualny komputer.

Szczerze mówiąc myślę, że można by to było zastąpić np. wstawiając w to miejsce adres IP rozgłoszeniowy i tak każdy by dostał wiadomość. Pytanie jak to zrobić? Ewentualnie można wstawić adresy IP z pliku /etc/hosts.
Już pal licho z wczytaniem adresów IP bo mogę je wstawić ręcznie, ale czemu nie działa:

Kod: Zaznacz cały

smbclient -M 
czy

Kod: Zaznacz cały

smbclient --message=ip.ip.ip.ip
Z tego co obecnie zauważyłem, po aktualizacji plik konfiguracyjny trochę uległ zmianie. Wiadomość do ,,romka'' była wysyłana ponieważ znajdował się on w grupie WORKGROUP i ta sama grupa była wpisana w sambie. U mnie natomiast wszystkie komputery pracują w domenie. Jak mogę przypisać sambę do domeny? Czy wystarczy w konfigu samo:

Kod: Zaznacz cały

DOMAIN=nazwa