Różne małe ale czasami przydatne skrypty
Ostatnia zmiana: 2013-11-26 18:43
Włącz/wyłącz wifi pod przyciskiem
# mkdir -p /etc/hotplug.d/button
# touch /etc/hotplug.d/button/01-wifitoggle
# chmod 755 /etc/hotplug.d/button/01-wifitoggle
A w tym pliku:
if [ "$BUTTON" = "wps" ] ; then
if [ "$ACTION" = "pressed" ] ; then
SW=`uci -q get wireless.@wifi-device[0].disabled`
if [ $SW == '1' ]; then
uci set wireless.@wifi-device[0].disabled=0
else
uci set wireless.@wifi-device[0].disabled=1
fi
wifi
fi
fi
Zakładając że przycisk nazywa się 'wps'. Patrz poradnik o
przyciskach.
Wyłączenie wifi w nocy
Do tego celu można użyć
crona. Wyłączamy np. o 23.00 a włączamy o 7 rano (do wykonania są poniższe polecenia):
# echo "0 23 * * * uci set wireless.@wifi-device[0].disabled=1; wifi" >> /etc/crontabs/root
# echo "0 7 * * * uci set wireless.@wifi-device[0].disabled=0; wifi" >> /etc/crontabs/root
# /etc/init.d/cron restart
Włączenie/wyłączenie połączenia z internetem przez przycisk
Tworzymy skrypt o nazwie
polacz.sh
# touch /bin/polacz.sh
# chmod 755 /bin/polacz.sh
o następującej zawartości
#!/bin/sh
UP=$(uci get -P /var/state/ network.wan.up)
if [ "x$UP" = "x1" ]; then
ifdown wan
else
ifup wan
fi
A następnie jego wywołanie dodajemy do przycisku - patrz poradnik o
przyciskach. Jeżeli używasz moich obrazów to w
/etc/config/system wystarczy wykonać następujące polecenia:
# uci add system button
# uci set system.@button[-1].button=wps
# uci set system.@button[-1].action=pressed
# uci set system.@button[-1].handler='/bin/polacz.sh'
# uci commit system
Lista połączonych klientów do AP
Polecenie zależy od używanego sterownika do karty radiowej
mac80211
# iw dev wlan0 station dump
Atheros (madwifi)
# wlanconfig ath0 list sta
Broadcom (brcm)
Restart połączenia w przypadku braku internetu
Tworzymy skrypt o nazwie
tester.sh
# touch /bin/tester.sh
# chmod 755 /bin/tester.sh
o następującej zawartości
#!/bin/sh
if ! ping -q -c 5 -W 10 google.com > /dev/null; then
(ifup wan) &
fi
Skrypt pinguje google - jeżeli nie dostanie odpowiedzi przez 5s to wznawia połączenie na interfejsie
wan.
Następnie można dodać wywołanie tego skryptu do crona i uruchamiamy go:
# /etc/init.d/cron stop
# echo "*/10 * * * * /bin/tester.sh" >> /etc/crontabs/root
# /etc/init.d/cron enable
# /etc/init.d/cron start
Od tej pory co 10 minut nastąpi wywołanie skryptu.
Skrypt uruchamiany przy starcie systemu
Wystarczy dodać skrypty do
/etc/rc.local, który wykonuje się po starcie systemu. Ostatnie polecenie w tym pliku musi być
exit 0, wszystko po nim nie zostanie wykonane.
Skrypt pokazujący status połączenia
Przeniesiony do
osobnego dokumentu.
Blokowanie użytkowników nie płacących
Przeniesiony do
osobnego dokumentu.
Uruchomienie polecenia z opóźnieniem
Jeżeli interesuje nas uruchomienie polecenia np. z opóźnieniem 20s po starcie systemu, wystarczy do pliku
/etc/rc.local dodać jako pierwszą linię (w przykładzie uruchomienie transmission):
(sleep 20; /etc/init.d/transmission start) &
Uruchomienie procesu po zamontowaniu nośnika
Wkładamy pendrive i po jego zamontowaniu ma się uruchomić jakiś proces, np. transmission lub minidlna.
Tworzymy skrypt o nazwie np.
99-mount w katalogu
/etc/hotplug.d/block o następującej zawartości:
#!/bin/sh
case $ACTION in
add)
grep -q /dev/$DEVICENAME /proc/mounts || exit 0
DIR=$(awk '/^\/dev\/'$DEVICENAME'/ {print $2}' /proc/mounts)
logger "/dev/$DEVICENAME zmontowano w $DIR"
###############################################
tu wpisz polecenie które ma się uruchomić
###############################################
;;
remove)
logger "Odlaczono /dev/$DEVICENAME"
;;
esac
W zmiennych mamy informacje o zamontowanej partycji w danym katalogu; skrypt należy uzupełnić o własny kod który robi to co chcemy. Przykład - po włożeniu nośnika ma się na nim uruchomić
minidlna (dane są ustawiane dynamicznie bez zapisu konfiguracji przez uci):
#!/bin/sh
case $ACTION in
add)
grep -q /dev/$DEVICENAME /proc/mounts || exit 0
DIR=$(awk '/^\/dev\/'$DEVICENAME'/ {print $2}' /proc/mounts)
/etc/init.d/minidlna stop
kill -9 minidlnad 1>/dev/null 2>&1
uci set minidlna.@minidlna[0].enabled=1
uci add_list minidlna.@minidlna[0].media_dir="$DIR"
uci set minidlna.@minidlna[0].db_dir="$DIR/_minidlna"
uci set minidlna.@minidlna[0].log_dir="$DIR/_minidlna"
/etc/init.d/minidlna start
uci revert minidlna
;;
remove)
/etc/init.d/minidlna stop
;;
esac
Uruchomienie procesu po zamontowaniu nośnika
(przy wykorzystanie block-mount):
http://eko.one.pl/?p=openwrt-hdd#uruchamianieserwisuprzypodczeniudysku