W tym artykule opiszemy, jak w prosty darmowy sposób wykorzystać możliwości skryptów w taki sposób abyśmy byli informowani drogą SMS’ową o ustalonych przez nas zdarzeniach na serwerze. Podamy także parę przykładów skryptów raportujących. Metoda jest na tyle elastyczna że możemy zaraportować dosłownie wszystko, wszystko zależy od naszej wizji i kreatywności.

Sposób działania wygląda następująco:

SMS Server - sposób działania

Krok 1 – Konfiguracja Gmail

Logujemy się na konto Google i przechodzimy do zakładki Gmail, po czym przechodzimy do ustawień i tworzymy nowy filtr. (w pole OD wpisujemy email z którego będą przychodzić maile od serwera) w moim przypadku będzie to nazwa serwera czyli @homserver). Klikamy Utwórz filtr na podstawie tych kryteriów wyszukiwania, zaznaczamy zastosuj etykietę z dowolnie przez siebie wybraną nazwą.

Teraz możemy przejść do zakładki Google Drive. Tworzymy Nowy skrypt który będzie obsługiwał nam przenoszenie poczty email na oś czasu, z której będziemy powiadamiani sms’owo

SMS Server - tworzenie nowego skryptu SMS Server - Google Apps Script

I w wklejamy poniższy kod:

function getTextFromHtml(html) {
return getTextFromNode(Xml.parse(html, true).getElement());
}
function getTextFromNode(x) {
switch(x.toString()) {
case 'XmlText': return x.toXmlString();
case 'XmlElement': return x.getNodes().map(getTextFromNode).join('');
default: return '';
}
}

function wyslij_sms()
{
var nazwakalendarza="TERMINAL" //Tutaj wpisz jak chcesz by nazywal sie twoj kalendarz
var etykieta="LINUX_TERMINAL" //Twutaj wpisz etykiete z ktorej beda zbierane emaile

var calendar = CalendarApp.getOwnedCalendarsByName(nazwakalendarza)[0]; //otwieramy kalendarz
if (!calendar){
calendar = CalendarApp.createCalendar(nazwakalendarza); //lub tworzymy nowy, jeżeli jeszcze nie istnieje
calendar.setHidden(false);
}

var label = GmailApp.getUserLabelByName(etykieta);
var threads = label.getThreads();

var now = new Date();
if(threads == 0) return; // zaprzestanie wykonywania, jeżeli brak nowych tematów
var messages = GmailApp.getMessagesForThreads(threads);

for (var i = 0 ; i < messages.length; i++) {
for (var j = 0; j < messages[i].length; j++) {
if(messages[i][j].isUnread() == true)
{
calendar.createEvent(messages[i][j].getSubject(),
new Date(now.getTime()+60000),
new Date(now.getTime()+60000), {location: getTextFromHtml(messages[i][j].getBody())} );
GmailApp.markMessageRead(messages[i][j]);//oznaczamy wiadomosc jako przeczytana
}
}
}
}

oraz edytujemy zmienne: nazwakalendarza i etykieta.

*Ważne żeby etykieta była tą samą którą dodaliśmy na swojej poczcie

Jeśli chcemy, aby wydarzenia nie pozostawały w kalendarzu, lecz były usuwane doklejamy:

Utilities.sleep(300000);

var TodaysEvents= calendar.getEventsForDay(now);
for (i in TodaysEvents) // wyszukiwanie według zdarzenia i kasowanie po wysłaniu
{
TodaysEvents[i].deleteEvent();
}

Uruchamiamy nasz skrypt(funkcję “wyslij_sms”) i zgadzamy się na autoryzację.

SMS Server - Autoryzacja

Krok 2 – Ustawienie punktu zaczepnego

Następnie ustawiamy trigger, czyli automatyczne uruchamianie skryptu co określony interwał czasu.

SMS Server - trigger

SMS Server - czas uruchamiania

*W moim wypadku jest to co minutę.

Krok 3 – Konfiguracja telefonu komórkowego

Ostatnim krokiem jest konfiguracja telefonu komórkowego (W ustawieniach kalendarza, w zakładce Konfiguracja telefonu komórkowego). Oraz ustawienie Przypomnienia i powiadomienia dla utworzonego kalendarza (żeby uniknąć błędów wybieramy SMS 0 min przed każdym wydarzeniem).

Przykładowe skrypty

Teraz już możemy przejść na nasz serwer i cieszyć się z nowej usługi. Wystarczy wysłać email na adres naszej skrzynki gmail.

Przykładowe skrypty które możemy wykorzystać by być na bieżąco:
1. Skrypt który sprawdza czy został wrzucony do folderu nowy plik, jeśli tak to powiadamia nas o tym

#!/bin/sh
Mail="twoj email@gmail.com"
plik=/home/skrypty/zmiany_w_folderze.txt #tutaj plik w ktorym trzymany jest stan folderu
NOW=$(date +"%m.%d.%Y %H:%M:%S")
if [ "$(ls -l $1 | grep -v -f $plik)" = "" ] ; then
ls -l $1 >$plik
else
echo "Pliki ktore ulegly zmianie :\n $(ls -l $1 | grep -v -f $plik|cut -d" " $
ls -l $1 >$plik
fi

Wynikiem działania jest następujące wydarzenie w kalendarzu, i takiej samej treści SMS na nasz numer.

SMS Server - wydarzenie w kalendarzu

Skrypt wykonujemy z parametrem folderu, który chcemy sprawdzić przykładowo (sh sprawdz.sh /home/mojkatalog/). Najlepiej jest go wrzucić do cron, by zautomatyzować cały proces.

2. Skrypt który informuje nas o nowo zalogowanym użytkowniku

#!/bin/bash
plik=/home/skrypty/zalogowani.txt #ścieżka do pliku
mail=twojemail@gmail.com
if [ -e $plik ]; then
wykon=$( last|head|grep -v -f $plik )
uzyt=$( last|head|grep -v -f $plik |cut -d' ' -f1,11 );
if [ "$wykon" != " " ]; then
echo "$uzyt"| mail -s "ZALOGOWAL SIE UZYTKOWNIK" $mail
last|head >$plik
fi
else
last|head >$plik
fi

Jednak na tym sposobie możemy oprzeć raporty ze wszystkich aplikacji, wystarczy wysłać email z logiem. Google Apps Script udostępnia wiele różnych ciekawych opcji automatyzacji.

  • Tomik

    Czas przetestować bo przydadzą mi się takie alerty na domowym serwerku :D Mam Raspberry Pi i chciałem właśnie by wysyłało to smski z różnymi informacjami :)

  • Jarek

    Brak znaku ) za parametrami funkcji for. (wiersz 30)

    • Bartek

      wiersz 30 :: for (var i = 0 ; i < messages.length; i++) {

      widnieje nawias zamykający funkcję

  • Very informative article.