wtorek, 1 kwietnia 2014

Automatyczne wyłączenie komputera po zakończeniu pobierania transmission

Skrypt ma na celu automatyczne wyłączenie programu transmission po zakończeniu pobierania torrentów.
Jeżeli skrypt zostanie wywołany z poziomu root'a wówczas nastąpi wyłączenie komputera.

Przygotowanie transmission do pracy ze skryptem:
- ustawienie rozszerzenia pliku ".part" dla nieskończonych pobierań (przejść na edycja >> preferencje >> zakładka torrenty >> sekcja Pobieranie i zaznaczyć check box obok "Dodawanie '.part' do nazw nieukończonych plików"),
- zapisywanie plików w (ta sama lokalizacja co powyżej, ja ustawiłem wspólny katalog dla ukończonych oraz nieukończonych pobierań),
- można ustawić wywołanie skryptu po ukończeniu torrenta (ta sama lokalizacja co powyżej), ja z tej opcji nie korzystam, ponieważ gdybym chciał aby wyłączyć komputer po zakończeniu pobierania za pomocą tej opcji, transmission musiało by zostać uruchomione z poziomu root'a (potencjalne zagrożenie bezpieczeństwa).


Po stronie systemu operacyjnego:
- uruchamianie skryptu z poziomu zwykłego użytkownika za pomocą crontaba (nastąpi wyłączenie transmission bez wyłączenia komputera)
- uruchamianie skryptu z poziomu root'a za pomocą crontaba (nastąpi wyłączenie transmission oraz wyłączenie komputera)

Dodawanie skryptu do crontaba (zwykły użytkownik):
- w konsoli crontab -e i dodanie wiersza
*/2 * * * * /bin/bash /home/pawel/torrent_killer.sh

W powyższym przykładzie skrypt będzie uruchamiany co drugą minutę (przy tej opcji bardziej opłacalne jest ustawienie w transmission automatycznego uruchamiania skryptu po zakończeniu pobierania, ponieważ nastąpi tylko wyłączenie transmission bez wyłączenia komputera).

Dodawanie skryptu do crontaba (root):
- w konsoli crontab -e i dodanie wiersza
*/2 * * * * /bin/bash /home/root/torrent_killer.sh

Przy tej opcji po zakończeniu pobierania nastąpi wyłączenie komputera.

Zawartość skryptu:
#!/bin/bash

# Variables

Download_Folder="/home/pawel/Pobrane/torrenty/"
Killer=`ps aux | grep transmission | grep -v grep | awk '{print $2}'`

# Sprawdzenie czy w katalogu pobierań znajdują się niezakończone pobierania

# Instrukcja warunkowa sprawdzająca czy wszystkie pobierania się zakończyły i wyłączająca klienta transsmision

if [ ! -z `pidof transmission` ] && [ ! -z `find $Download_Folder -name \*.part -type f | head -n1 |awk '{print $1}'` ]
then echo "Znaleziono pliki"
else
if [ ! -z `pidof transmission` ]
then echo "Nie znaleziono plików *.part, ubijam transsmision" && kill -9 $Killer && halt -p

else
echo "Transmission nie jest uruchomiony"
fi
fi


Komentarz do skryptu:
Download_Folder - musi być ustawiony taki sam jak w programie transmission, żeby można było odnaleźć pliki z niedokończonymi pobieraniami
Killer - znalezienie id procesu programu transmission w celu późniejszego jego wykorzystania do zamknięcia transmission
pierwszy if - sprawdzenie czy program transsimison działa jeżeli tak to sprawdzenie czy w Download_Folder znajdują się pliki *.part, (potrzebne były head i awk aby wyświetlić tylko jedną wartość, w przeciwnym wypadku test otrzymywałby zbyt wiele argumentów). Jeżeli zostały znalezione pliki part jest wyświetlany komunikat "Znaleziono pliki" i kończone jest wykonywane skryptu. Konieczne jest sprawdzenie działania programu transmission w przeciwnym wypadku przy dodaniu skryptu do crona z poziomu root'a komputer by się cały czas wyłączał.
drugi if - sprawdzenie czy program transmission działa, jeśli tak to jest wyświetlany komunikat "Nie znaleziono plików *.part, ubijam transsmision" oraz wykonywane jest zamknięcie programu transmission (zwykły użytkownik) lub zamkniecie programu i wyłączenie komputera (root).
ostatni else - jeżeli program transmission nie jest uruchomiony następuje wyświetlenie komunikatu "Transmission nie jest uruchomiony" i kończone jest działanie skryptu


Uwagi:
- skrypt jest trochę rozbudowany (overkill :) ) jak na taką prostą czynność, można to zrobić inaczej ale do moich potrzeb nadaje się idealnie,
- na moim komputerze miałem wcześniej włączone uruchamianie skryptu z poziomu zwykłego użytkownika co minutę ale czasami następowało wyłączenie transmission zanim zostało rozpoczęte pobieranie, więc częstotliwość została zmieniona do dwóch minut
- jeżeli ktoś będzie chciał korzystać ze skryptu do wyłączania komputera po zakończeniu pobierania oprócz uruchamiania crona z konta użytkownika root należy rozważyć uruchamianie w większych odstępach czasu np. 5 lub 10 minut. Nie powinno się mieć przy tym ustawieniu włączonego automatycznego uruchamiania transmission po włączeniu komputera - przy braku pobierania torrentów następowałoby automatyczne wyłączanie komputera.




Brak komentarzy:

Prześlij komentarz