Итак что нам понадобится для того чтобы скрипт ожил:
1) Нам нужен браузер, я настоятельно советую пользоваться elinks, т.к. это один из немногих текстовых веб-браузеров, который способен исполнять js. Во-первых, текстовый это удобно, не нужен GUI для запуска(можно запускать на сервере), а для чего нам нужен js? Очень много счётчиков использующих js.
2) Понадобится wget, для получения настроек.
3) Понадобится программка notify-send, для красивового вывода сообщений.
Алгоритм будет следущий
1. заходим на сайт и получаем файл с заданием(под заданием я имею ввиду набор веб-сайтов/ip-адресов по которому нужно пройтись)
2. разбираем файл, в нём каждая строка это ссылка на сайт.
3. заходим на нужный сайт
4. замираем на некоторое время, чтобы страничка подгрузилась
5. завершаем начатый процесс
6. идём на 3-ий пункт и делаем тоже самое для следующего сайта и так пока не пройдём весь список.
Для того чтобы elinks работал как надо, нам надо убедиться что он собран с поддержкой JS. Выполняем:
elinks -version
Ищем в полученной информации ECMAScript или Scripting (ECMAScript scripting engine), если у Вас это есть то всё отлично, если же нет (у меня в Ubuntu 9.04 не было) тогда скачиваете последнюю версию elinks ставите библиотеку
apt-get install libmozjs-dev
(она снесёт firefox-3.5, если он стоит, но т.к. эта библиотека нужна только для того, чтобы собрать elinks, её можно будет в конце удалить и вернуть Ваш любимый FireFox-3.5 на место).
После того как собрали elinks, убедимся что у нас работает notify-send.
notify-send temp
Если написано что такой команды нет, то поставьте пакет libnotify-bin(так notify-send называется в Ubuntu).
Переходим к скрипту:
#!/bin/bash #Настройки: #Включить/выключить оповещения NOTIFY="true" #Браузер, через который будем просматривать странички BROWSER="elinks" #Иконки, которые будут использоваться для оповещния ICON="-i /usr/share/icons/gnome/32x32/emblems/emblem-web.png" ICON_ERROR="-i /usr/share/icons/gnome/32x32/emblems/emblem-important.png" ICON_PROGRESS="-i /usr/share/icons/gnome/32x32/emblems/emblem-urgent.png" ICON_DONE="-i /usr/share/icons/gnome/32x32/emblems/emblem-default.png" #Время для загрузки и нахождения на страничке #(если у Вас медленный интернет, увеличьте до требуемого времени) sleeptime=15 #Путь до файла с заданием FILEHOST="http://www.nol1ght.ru/" #Название файла с заданием FILE="websites.txt" #Удаляем файл с заданием, если он есть rm $FILE #Получаем файл с заданием wget $FILEHOST$FILE #Проверряем наличие файла и его читаемость if [ ! -f $FILE ]; then if( "$NOTIFY" = "true" );then DISPLAY=:0.0 notify-send $ICON_ERROR "nol1ght's GoToTheLink" "ERROR: $FILE does not exists" fi exit 1 elif [ ! -r $FILE ]; then if( "$NOTIFY" = "true" ); then DISPLAY=:0.0 notify-send $ICON_ERROR "nol1ght's GoToTheLink" "ERROR: can not read $FILE" fi exit 2 fi #Создаём массив в который поместим линки из нашего задания LINKSARRAY[0]="" #Создаём счётчик COUNTER=0 #Начинаем построчное чтение файла while read line do #Записываем строки в массив LINKSARRAY[$COUNTER]=$line #Увеличивае счётчик на 1 COUNTER=$(expr $COUNTER + 1) done < $FILE #Записываем кол-во заданий len=$(expr $COUNTER - 1 ) #Выводим приветсвенное сообщение о скрипте if( "$NOTIFY" = "true" ); then DISPLAY=:0.0 notify-send $ICON "nol1ght's GoToTheLink" "nol1ght's visits script 'gotothelink' 0.1 is working with parametrs: Browser=$BROWSER Sleeptime=$sleeptime Websites=${#LINKSARRAY[*]}" fi #Сбрасываем счётчик COUNTER=1 #Начинаем читать массив for website in ${LINKSARRAY[*]} do #Заходим браузером на нужный сайт $BROWSER $website& #Запоминаем номер процесса pid=$! #Ждём заданное выше время sleep $sleeptime #Завершаем процесс kill -TERM $pid #Выводим сообщение о проделанной работе if( "$NOTIFY" = "true" ); then #Вычисляем процент пройденных сайтов let math=($COUNTER*100)/${#LINKSARRAY[*]} #Увеличиваем счётчик пройденных сайтов COUNTER=$(expr $COUNTER + 1) #Оповещаем пользователя DISPLAY=:0.0 notify-send $ICON_PROGRESS "nol1ght's GoToTheLink" "DONE: $math %" fi done #Выводим сообщение об успешном завершении работы if( "$NOTIFY" = "true" ); then DISPLAY=:0.0 notify-send $ICON_DONE "GoToTheLink" "The program is done, it has visited "${#LINKSARRAY[*]}" websites."; fi #Удаляем полученный файл с заданием rm $FILEДобавим скприпт в крон, открываем кронтаб:
crontab -eи вписываем строчку: 40 * * * * /home/nol1ght/gotothelink Теперь, каждые 40 минут, скрипт будет посещать выбранные нами сайты. Вот собстенно и всё... Надеюсь он будет кому-то полезен/интересен.
source:
gotothelink
websites.txt
Комментариев нет:
Отправить комментарий