Strona 1 z 1

[+] Skrypt bash, powiadamiane sms i ograniczenie wysyłania tych smsów

: 23 lipca 2011, 18:17
autor: alv
Witam.

Próbuję ograniczyć wysyłanie powiadomień sms, powiedzmy, raz na 10 minut. Skrypt napisany w bashu jest dodany do crona (co 1 minutę).
Korzystam z dostępu skryptowego T-mobile do wysyłania moich smsów (10 na 24h). Pomożecie?

A oto przykładowy skrypt (docelowo ma być ich kilka i mają testować inne funkcje np. działanie serwerów).

Kod: Zaznacz cały

#!/bin/bash
# by ALV

TEMPERATURA=`sensors | sed '/Core0 Temp/!d;{s/..°C\ .*//;s/.*+//}'`
DATA=`date +%H:%M:%S`
LOGIN="48660xxxxxx"
PASSWORD="xxxx"
DO="660xxxxxx"

if [ "$TEMPERATURA" -ge "41" ]
   then
   wynik="$TEMPERATURA C - temperatura w normie"
   echo "$wynik"
elif [ "$TEMPERATURA" -ge "50" ]
   then
   wynik="$TEMPERATURA C - temperatura za wysoka"
   echo "$wynik"
elif [ "$TEMPERATURA" -ge "55" ]
   then
   wynik="$TEMPERATURA C - temperatura za wysoka"
   echo "$wynik"
   WIADOMOSC=" *SYSTEM* $DATA Temperatura procesora za wysoka: $TEMPERATURA C"
elif [ "$TEMPERATURA" -ge "60" ]
   then
   wynik="$TEMPERATURA C - serwer juz sie pali"
   echo "$wynik"
   WIADOMOSC=" *SYSTEM* $DATA Serwer juz sie pali! temperatura wynosi: $TEMPERATURA C"
else
   wynik="$TEMPERATURA C - temperatura idealna"
   echo "$wynik"
fi

if [ -n "$WIADOMOSC" ]
  then
  curl "http://www.t-mobile.pl/msg/api/do/tinker/sponsored?message=$WIADOMOSC&number=$DO&password=$PASSWORD&login=$LOGIN&failure=http://www.era.pl&success=http://www.eraomnix.pl"
  echo "wyslano sms"
fi

Pozdrawiam,
ALV

: 24 lipca 2011, 18:20
autor: xmaster
Może i nie na temat, ale czy nie lepiej wysyłać maile?
Pakiety internetowe są już "dość niedrogie" a z SMS to dla mnie przeżytek.

: 24 lipca 2011, 18:34
autor: alv
No właśnie nie lubię odbierać poczty na telefonie, bo zwykle jest to 10-20 wiadomości dziennie, a więc za dużo. W T-mobile jest pakiet z nieograniczonym transferem, nawet korzystam z niego.
Jeżeli mam możliwość wysyłania za darmo tych 10 smsów dziennie to czemu nie?

: 25 lipca 2011, 00:01
autor: fabix
Jedno z możliwych rozwiązań. Utworzyć jakiś plik i wrzucać do niego np. treść wiadomości za każdym razem go nadpisując. Skrypt może od obecnej daty odejmować datę ostatniej edycji pliku, (obie w sekundach). W ten sposób uzyskasz potrzebne ograniczenie czasowe.

: 26 lipca 2011, 13:34
autor: alv
Ostatecznie zrobiłem to tak (na przykładzie innego skryptu):

Kod: Zaznacz cały

#!/bin/bash
#######################################################
# 
#     by ALV 
#
#    Przykładowy sms z powiadomieniem:
#
#    *SYSTEM* 15:53:01 TEMP:40 PING:3.548 ms TS3:ON-30/450  UPTIME:15:01 FREEMEM:67% LOAD:0.00,0.03,0.16
#
#### Kilka podstawowych funkcji
#
# TEMPERATURA w liczbie całkowitej, np. 36
# PINGUJ jesli nie odpowiada OFF lub w formacie, np. 3.723 ms
# TS3STATUS status ON/OFF
# TS3QUER liczba online i max, np. 55/450
# FREEM procent wolnej pamieci ram (nie swap)
# LOADV obciazenie systemu
#
################################################################

################################## Kilka podstawowych zmiennych

TEMPERATURA=`sensors | sed '/Core0 Temp/!d;{s/..°C\ .*//;s/.*+//}'` 
PINGUJ=`ping -c 1 onet.pl | tail -1 | cut -d "/" -f 5`
TS3STATUS=`netstat -an | grep 10011`
TS3QUER=`curl -s http://s1-alv.pl/status/ts32.php` 
TOTALM=`free -m | grep "Mem:" | awk '{print $2}'`
USEDM=`free -m | grep "Mem:" | awk '{print $3}'`
FREEM=$[$USEDM * 100 / $TOTALM]
LOADAV=`uptime | cut -d ":" -f 5 | sed 's/^ *//;s/ //;s/ //'`

###################################### zmienne do wysylania smsa

DATA=`date +%H:%M:%S`
LOGIN="48660xxxxxx"
PASSWORD="xxxxx"
DO="660xxxxxx"

############################################# wyswietlanie pingu 

if [ -n "$PINGUJ" ]
then
PINGR="$PINGUJ ms"
else
PINGR="OFF"
fi

####################################### wyswietlanie statusu TS3

if [ -n "$TS3STATUS" ]
then
TS3="ON"
else
TS3="OFF"
fi

## wyswietlanie uptime w formie 30d (dni) lub np. 12:53 (godziny)

UP1=`uptime` 
if $(echo $UP1 | grep -E "min|days" >/dev/null); 
then
UP2=$(echo $UP1 | sed s/ays,//g| awk '{ print $3 $4}')
elif $(echo $UP1 | grep -E "day" >/dev/null); 
then
UP2=$(echo $UP1 | sed s/ay,//g| awk '{ print $3 $4}')
else
UP2=$(echo $UP1 | sed s/,//g| awk '{ print $3 }')
fi
UP1="$UP2"



################################################# tresc wiadomosci

WIADOMOSC="*SYSTEM* $DATA TEMP:$TEMPERATURA PING:$PINGR TS3:$TS3-$TS3QUER UPTIME:$UP2 FREEMEM:$FREEM% LOAD:$LOADAV"


####################### jesli znajdzie plik test, ktroy istnieje 10 min usuwam

PLIK="/home/alv/test"

find $PLIK -mmin +10 -exec rm $PLIK \;

if [ -e $PLIK ]
then
echo "SMS nie został wysłany"
else
touch $PLIK
curl "http://www.t-mobile.pl/msg/api/do/tinker/sponsored?message=$WIADOMOSC&number=$DO&password=$PASSWORD&login=$LOGIN&failure=http://www.era.pl&success=http://www.eraomnix.pl"
echo "SMS został wysłany"
fi

Właściwie fabix podsunął mi takie rozwiązanie (z plikiem i datą). Dziękuję!

: 26 lipca 2011, 23:14
autor: fnmirk

: 27 lipca 2011, 11:35
autor: alv
Tak, widziałem to.
Większość wykorzystuje darmowe bramki (ale nie wszystkie). Mój skrypt działa i chyba na razie mi wystarczy, dzięki!