skrypt wysyłający wiadomości do użytkowników Windowsa (bash i samba)
: 12 maja 2010, 13:44
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).
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:czy
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
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
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
Kod: Zaznacz cały
smbclient --message=ip.ip.ip.ip
Kod: Zaznacz cały
DOMAIN=nazwa