Mój mały skrypcik
"Łukasz Indeka"
0h w wp.pl
Pią, 22 Maj 2009, 12:49:29 CEST
Witam,
Postanowiłem podzielić się moją radosną twóczością.
Ponieważ 5 smsów na dzień w Erze to czasami mało (zwłaszcza gdy
testuje się jakiś nowy skrypt), a mam dostęp do więcej niż
jednego konta na eraomnix (jak dobrze mieć rodzinę :D), od dawna
kombinowałem, jak to wykorzystać. Wreszcie od myślenia przeszedłem
do czynów i efekty przedstawiam poniżej. Oczywiście powinno to
również działać dla pozostałych bramek.
1. Skrypt
Krótki, ale skuteczny:
#!/bin/sh
# get phone numbers
phones=`cat $HOME/.smsnums`
# for each phone number
for num in $phones; do
# use sms with phone specific settings
/usr/local/bin/sms -c $HOME/.smsrc-$num "$@"
if [ $? -eq 0 ]; then
# break on success
break
else
# rotate numbers on failure
sed -i -e '1h;1d;$G' $HOME/.smsnums
fi
done
Skrypt próbuje wywołać sms z kolejnymi plikami konfiguracyjnymi,
przekazująć pozostałe parametry wywołania. Jeśli wysłanie się
nie powiedzie, dane ustawienia są przerzucane na koniec listy. Jeśli
więc dzisiaj wysłałem już 5 smsów z pierwszego numeru telefonu i
przy kolejnej próbie wyskoczy błąd, to następne będą już
zaczynały próby od kolejnego numeru.
2. Konfiguracja
a) sms
W katalogu użytkownika tworzymy dla każdego konta osobny plik
konfiguracyjny. Ja przyjąłem schemat .smsrc-numer_telefonu (może
być cokolwiek). Przy okazji konfiguracja dla mojego numeru została
podlinkowana do ~/.smsrc żeby się nie narażać na rozjechanie zbyt
wielu konfiguracji.
b) skryptu
Lista dostępnych konfiguracji jest zapisywana w pliku $HOME/.smsnums U
mnie plik wygląda mniej więcej tak:
600123456
600456789
600789456
Jak widać w pliku zapisuję tylko część nazwy pliku
konfiguracyjnego po myślniku.
Przy okazji testów okazało się, że wywołanie z sms z parametrem
-c $HOME/.smsrc nie jest równoważne wywołaniu bez tego parametru.
Wynika to z tego, że funkcja Config::ReRead nie uwzględnia ustawień z
konstruktora klasy Config, a jedynie czyści wszystkie parametry ustawione
wcześniej. Skutkuje to brakiem wartości domyślnych dla mailaddr i
template. Długo się głowiłem co się dzieje, bo cały czas
wyskakiwał mi błąd. Okazało się, że w plikach konfiguracyjnych
zakomentowałem linię ustawiającą template, bo zależało mi
akurat na wykorzystaniu wartości domyślnej opisanej w dokumentacji. :)
Ostatecznie przekopiowałem więc kawałek kodu z konstrktora.
Zastanawiałem się czy wstawić tylko część z params, ale
ostatecznie wybrałem wszystko. Diff poniżej:
--- /home/tests/packages/sms/sms-2.2.3/config.cc 2009-01-17
15:14:10.000000000 +0100
+++ /home/tests/packages/sms/sms-2.2.3-mod/config.cc 2009-05-08
15:09:15.000000000 +0200
@@ -37,6 +37,11 @@
void Config::ReRead(const std::string &name)
{
params.clear();
+ // domsylne zmienne z pliku koniguracyjnego
+ params["mailaddr"] = EmailAddress();
+ params["template"] = "${message}";
+ ReadFile(string(SMS_SYSCONFDIR) + "/" + SMS_CONFIG);
+ ReadEnv();
ReadFile(name);
}
Pozdrawiam,
Łukasz
--
Łukasz Indeka
0h w wp.pl
Więcej informacji o liście dyskusyjnej Sms-users