![]() |
|
Модераторы: ginnie, korob2001 |
![]()
|
|
| ll75 |
|
|||
|
ok, let' go ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 4.10.2006 Где: musiq Репутация: нет Всего: 1 |
Добрый день,
пишу скрипт который проверяет доступны ли в данный момент некоторые урлы, при недоступности 1 из них надо в файл записать 0, а при доступности 1,если он снова станет доступным -то выполнить действие...Ниже указан скрипт, в котором урлы заданы в массиве,и каждый раз обрабатывается 1 урл.Но в файл у меня сохраняется только текущее значение состояния 0 или 1.а как бы исп-ть предыдущее?
Заранее спс. Это сообщение отредактировал(а) korob2001 - 5.10.2006, 10:05 |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
Я честно говоря не совсем понял вопрос. Но есть некоторые нюансы, на которые уже нельзя не обратить внимания:
1. Для того, что бы проверить существует ли ресурс по заданному URL, лучше всё же воспользоваться функцией head() из модуля LWP::Simple, работать будет гораздо быстрее, да и для трафика полезнее. 2. Ты открыл файл для чтения и прочитал строку, а закрываешь его только в том случае, если:
в противном случае он остаётся открытым, это хоть и не приводит к ошибке, но всё же рекомендуется закрывать файл в любом случае. 3. Ты делаешь каждые 5 секунд системный вызов, насколько я понял, самого себя. Может лучше пересмотреть алгоритм и попробовать обойтись без вызова системы? Например засыпать в бесконечном цикле? Поясни подробнее, чего ты хочешь добиться? Впринципе всё понятно, не ясен сам вопрос. Это сообщение отредактировал(а) korob2001 - 5.10.2006, 10:28 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| ll75 |
|
|||
|
ok, let' go ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 4.10.2006 Где: musiq Репутация: нет Всего: 1 |
ну т.е. у меня получается если 1 из урлов недоступен,а потом становится доступным в файле состояния есть
только инфа о текущем урле...например если http://ya.ru стал доступен, в файле инфа присутствует о http://www.rambler.ru (последний обраьотанный из массива).Необходимо наверное сделать как-то,чтобы в файле была инфа только из 2-х строк вида: http://ya.ru 1 http://www.rambler.ru 0 А потом чтобы не дописывалось в файл, а новые данные,например http://ya.ru 0 http://www.rambler.ru 1 Но в таком случае как-то ж надо сравнивать еще текущие значения с предыдущим... Плз хелп ми,запутался... |
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 2 Всего: 84 |
ll75, поищи поиском на форуме, sharq приводил пример проверки работоспособности proxy. Модифицируй его код и используй
|
|||
|
||||
| ll75 |
|
|||
|
ok, let' go ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 4.10.2006 Где: musiq Репутация: нет Всего: 1 |
Я нашёл только http://forum.vingrad.ru/index.php?showtopic=87458&hl= но там нет ничего про запись в файл данных о состоянии и считывании из него....
Добавлено @ 13:51 как вообще правильно сделать,что бы писать в файл только 2 урла,т.к. в цикле обрабатывается по 1 урлу и потом дописывается в файл,в рез-те файл постоянно растёт...?
Это сообщение отредактировал(а) korob2001 - 6.10.2006, 03:57 |
|||
|
||||
| ll75 |
|
|||
|
ok, let' go ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 4.10.2006 Где: musiq Репутация: нет Всего: 1 |
добавил unlink перед циклом и touch внутри цикла-теперьфайл создаётся правильно -из 2-х урлов.Но как теперь
сравнивать состояние в файле - если 0 было, а стало 1,то ....?
Это сообщение отредактировал(а) korob2001 - 6.10.2006, 03:58 |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
Модератор: Используй кнопку "КОД" для вставки кода, я не могу постоянно это делать за тебя.
По теме: 1. Открывай файл для чтения. 2. Читай свой файл в массив. 3. Закрывай файл 4. Открывай файл для записи 5. В цикле проходи по массиву, разбивай строку и проверяй на доступность URL. 6. Создай условие: Если URL доступен пиши в файл этот URL, пробел, 1, если же нет, то URL, пробел, 0. 7. Закрывай файл. PS: Это всё хорошо, но тут так и напрашивается DBM файл. В котором ключём является URL, а значением - его состояние. Тогда не придётся открывать и закрывать файл по два раза. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| ll75 |
|
|||
|
ok, let' go ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 4.10.2006 Где: musiq Репутация: нет Всего: 1 |
спс,попробую так
|
|||
|
||||
| ll75 |
|
|||
|
ok, let' go ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 4.10.2006 Где: musiq Репутация: нет Всего: 1 |
почему предыдущее значение $prev{$host} пустое при изменении урла с "http://www.7rr.org/" на "http://www.7rrr.org/" в массиве @urlz , а если нет изменений состояния - она не пустая?помогите плз,запутался....
PREV:1 PREV:0 STATE: http://ya.ru 1 PREV-> http://ya.ru 1 STATE: http://www.7rr.org/ 1 PREV-> http://www.7rr.org/ Sending e-mail-http://www.7rr.org/ is UP
Добавлено @ 17:09 ну т.е. почему if ($state == 0) { print "Sending e-mail-$host is DOWN\n"; не работает? |
|||
|
||||
| korob2001 |
|
||||||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
Думаю причина в том, что хеш %prev заполняется из файла и когда ты запускаешь впервые свой скрипт или добавляешь в массив новый URL, то значение не инициализировано. Попробуй запусти свой код повторно и убедишься в этом.
Зачем ты удаляешь файл?
Зачем открываешь файл на добавление, а не на запись?
Ведь IO операции не есть быстрые, а ты на каждой итерации открываешь и закрываешь файл. Может проще было бы один раз открыть файл для записи, перед циклом и после цикла закрыть его? Это нас избавило бы от ненужного удаления файла, повысит производительность, да и ресурсы здорово сэкономит. Вобщем: 1. Удаляй строку
2. Эту строку поставь перед началом цикла и разумеется удали её из тела цикла:
Заметь, что файл открывается для записи, а не для добавления, т.е. вместо >> используем > 3. Эту строку вынеси из тела цикла и поставь сразу же после закрывающей скобки цикла:
4. Сразу же после строки:
Поставь строку:
Хотя наверное в данном случае, было бы правильнее просто присвоить 0 данному елементу хеша. Т.е.
Потому как если делать по первому варианту, то получается у нас не предидущее значение, а текущее. По второму варианту, мы как бы эмулируем недоступность сервера в прошлом. Это сообщение отредактировал(а) korob2001 - 7.10.2006, 03:33 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||||||||||
|
|||||||||||||||||
| ll75 |
|
|||
|
ok, let' go ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 4.10.2006 Где: musiq Репутация: нет Всего: 1 |
после замены
теперь постоянно значение PREV 0... |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
Это сообщение отредактировал(а) korob2001 - 9.10.2006, 20:23 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
![]()
|
| Правила форума "Perl: Системное программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |