Wykonanie czynności po zakończeniu pobierania
18.08.2023 | aktual.: 19.08.2023 13:30
Osoby z wolnym internetem, mogą chcieć zostawić włączony komputer, podczas nieobecności w domu. Taki komputer powinien wykonać jakąś akcję, po pobraniu, np. wyłączyć się.
Rozwiązanie przedstawię na bazie Epic Games Store.
Ogólny szablon programu wygląda tak:
OKI=false; while true; do for a in `netstat -p | grep -i $nazwa_procesu | egrep '^tcp' | awk '{$1=$1;print}' | cut -d' ' -f4 | cut -d':' -f2`; do tcpdump port $a & done | while read -t 600 a; do OKI=false; done; if [[ "$OKI" == 'true' ]]; then break; fi; OKI=true; sleep; 5; done; polecenia_po_zakończeniu
Program działa w ten sposób. W pętli następuje wyświetlenie wszystkich otwartych łącz typu tcp. Dla wszystkich takich łącz, sprawdzana jest aktywność równocześnie. Jeżeli będzie aktywność w czasie 10 minut, to do OKI przypisujemy false, czyli nie wykonujemy wskazanych poleceń. Jednak, po odkryciu, że jest cisza, ponawiamy próbę. Jeżeli cisza będzie istnieć kolejne 10 minut, to wykonujemy zaplanowane czynności.
Teraz skrypt wyłączający kompa, gdy Epic Games Store przestanie pobierać. Należy do zmiennej WINEPREFIX podać ścieżkę do klienta Epic Games Store. Trzeba też pamiętać, że dla programów Windowsowych, za nazwę monitorowanego procesu, należy podać winserver. Również trzeba pamiętać, że Epic Games Store powinien być jedyną uruchomioną Windowsową aplikacją (nie licząc programów, które wine musi uruchomić, by móc działać, jak explorer.exe).
Przykład:
export WINEPREFIX=/ścieżka/do/epic;
OKI=false; while true; do for a in `netstat -p | grep -i wineserver | egrep '^tcp' | awk '{$1=$1;print}' | cut -d' ' -f4 | cut -d':' -f2`; do tcpdump port $a & done | while read -t 600 a; do OKI=false; done; if [[ "$OKI" == 'true' ]]; then break; fi; OKI=true; sleep; 5; done; echo shutdown; wineserver -k; sleep 600; /usr/sbin/shutdown -h now
Po zakończeniu pobierania, czekamy dziesięć minut i wyłączamy komputer. Trzeba pamiętać, by po ponownym uruchomieniu, pozwolić na weryfikację instalacji.,
Przetestowane w dniu dzisiejszym na OpenSUSE Tumbleweed.