Архивировано

Эта тема находится в архиве и закрыта для публикации сообщений.

chernenko

Оповещение о состоянии FTP сервера

Рекомендованные сообщения

Я имею веб сайт размещенный на круглосуточном хостинге, который ссылается на FTP размещенный на моем домашнем сервере. Домашний сервер включен не всегда. Как мне сделать, что бы люди на сайте видели что FTP выключен или включен? Так чтобы можно было назначить разные фото на разный случай, так как это делается с локальныйми FTP серверами в нашей сети.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. no-ip.org для домашнего сервака, либо +5 за статический ип

2. на арендованном ложим .cgi, в котором по пингу или хэдэрам (не забыть установить маленький таймаут) проверяем, что наш XXX.no-ip.org жив

3. либо .cgi сам генерит все страницы, либо ложит кук

3.1 если последний вариант, то ssi-хэдэр, включаемый во все страницы отлавливает кук и переключает переменную

3.2 страничка ssi`ем смотрит состояние переменной и решает, что отображать

 

Не уверен, что получится, но установить переменную окружения можно попытаться непосредственно в .cgi, включенный в ssi-хедер (через ssi же)

Лучше всего состояние сервака кэшировать и проверять лишь раз в N минут

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. no-ip.org для домашнего сервака, либо +5 за статический ип

2. на арендованном ложим .cgi, в котором по пингу или хэдэрам (не забыть установить маленький таймаут) проверяем, что наш XXX.no-ip.org жив

3. либо .cgi сам генерит все страницы, либо ложит кук

3.1 если последний вариант, то ssi-хэдэр, включаемый во все страницы отлавливает кук и переключает переменную

3.2 страничка ssi`ем смотрит состояние переменной и решает, что отображать

 

Не уверен, что получится, но установить переменную окружения можно попытаться непосредственно в .cgi, включенный в ssi-хедер (через ssi же)

Лучше всего состояние сервака кэшировать и проверять лишь раз в N минут

 

no-ip стоит. так что с первым пунктом все ясно, а вот для второго и третьего все-таки придется браться за книги.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1. no-ip.org для домашнего сервака, либо +5 за статический ип

2. на арендованном ложим .cgi, в котором по пингу или хэдэрам (не забыть установить маленький таймаут) проверяем, что наш XXX.no-ip.org жив

3. либо .cgi сам генерит все страницы, либо ложит кук

3.1 если последний вариант, то ssi-хэдэр, включаемый во все страницы отлавливает кук и переключает переменную

3.2 страничка ssi`ем смотрит состояние переменной и решает, что отображать

 

Не уверен, что получится, но установить переменную окружения можно попытаться непосредственно в .cgi, включенный в ssi-хедер (через ssi же)

Лучше всего состояние сервака кэшировать и проверять лишь раз в N минут

 

Ну что же за... Пожалуйста конкретней! Я думаю все понимают, что надо проверять что "жив"...

 

Все куда проще!

Комп стоит дома и сайт тоже на домашнем компьютере?? (если нет, то посмотри через phpinfo() поддерживает ли хост работу с сокетами)

 

Вообщем вам нужно в веб сервере апаче разрешить использование сокетов. Потом пытаться создать соединение с сервером фтп и если такое не происходит - вывести картинку 1, а если все нормально, то картинку 2.

 

вот такой вот пример...

все проверил, все работает.

<?
 $service_port = 21; 
 $address = gethostbyname('ftp1.corbina.ru');
 $timeout = 10; 

 $ftp = @fsockopen($address, $service_port, $errno, $errstr, $timeout);

 if (!$ftp)
 {
 echo ('server down');
 }
 else
 {
 echo ('server up');
 }

?>

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Ну что же за... Пожалуйста конкретней! Я думаю все понимают, что надо проверять что "жив"...

Да откуда я знаю на чем у человека будет cgi?

 

# cat page.tpl.html
<html>
<body>
	my host is {status}<br>
	{ifup}{ifdown}
</body>
</html>

# cat cgi-bin/upchecker.cgi
#!/bin/bash
#MY_HOST="ftp://ftp.iitm.ac.in"
MY_HOST="http://gnu.kookel.org"
log=/var/log/upchecker.log
timeout=5
maxtime=5
curl="curl -I --connect-timeout ${timeout} --max-time ${maxtime} ${MY_HOST}"
out="`${curl} 2>&1 | tee -a ${log}`"
MY_HOST_STATUS=down
if [ `echo ${MY_HOST} | grep "ftp://"` ]
then
[ `echo -e "${out}" | grep -i "total" | wc -l` -ge 1 ] && MY_HOST_STATUS="up"
else
[ `echo -e "${out}" | grep "200 OK" | wc -l` -eq 1 ] && MY_HOST_STATUS="up"
fi
if [ "${MY_HOST_STATUS}" == "up" ]
then
P_STATUS="up"
P_IFUP="here goes link <a href=\"${MY_HOST}\">${MY_HOST}</a>"
P_IFDOWN=
else
P_STATUS="down"
P_IFUP=
P_IFDOWN="sorry"
fi
P_STATUS="`echo \"${P_STATUS}\" | sed 's/\//\\\\\//g'`"
P_IFUP="`echo \"${P_IFUP}\" | sed 's/\//\\\\\//g'`"
P_IFDOWN="`echo \"${P_IFDOWN}\" | sed 's/\//\\\\\//g'`"
page="`cat '../page.tpl.html' | sed \"s/{status}/${P_STATUS}/\" | sed \"s/{ifup}/${P_IFUP}/\" | sed \"s/{ifdown}/${P_IFDOWN}/\"`"
echo "Content-type: text/html"
echo ""
echo -e "${page}"

# curl http://localhost/cgi-bin/upchecker.cgi
<html>
<body>
	my host is up<br>
	here goes link <a href="http://gnu.kookel.org">http://gnu.kookel.org</a>
</body>
</html>

 

ssi несколько сложнее, но зато удобнее в использовании... может потом напишу

 

ПС: curl, bash, grep, wc из cygwin, потому как хочется чтобы работало и в *nix и в винде

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ох... сплошная заморочка... хотя кому что больше нравиться

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ох... сплошная заморочка... хотя кому что больше нравиться

Никакая не заморочка!

Если из моего примера убрать обработку шаблонов, поддержку http://+ftp:// заменить какой-нибудь одной, а конфигурационные переменные убрать и запихнуть значения прямо в вызов curl, то получится не длиннее чем у тебя.

#!/bin/bash
MY_HOST="http://gnu.kookel.org"
MY_HOST_STATUS=down
[ `curl -I --connect-timeout 5 --max-time 5 ${MY_HOST} 2>&1 | grep "200 OK" | wc -l` -eq 1 ] && MY_HOST_STATUS=up
echo "Content-type: text/html"
echo ""
echo "server is ${MY_HOST_STATUS}"

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну что же за... Пожалуйста конкретней! Я думаю все понимают, что надо проверять что "жив"...

 

Все куда проще!

Комп стоит дома и сайт тоже на домашнем компьютере?? (если нет, то посмотри через phpinfo() поддерживает ли хост работу с сокетами)

 

Вообщем вам нужно в веб сервере апаче разрешить использование сокетов. Потом пытаться создать соединение с сервером фтп и если такое не происходит - вывести картинку 1, а если все нормально, то картинку 2.

 

вот такой вот пример...

все проверил, все работает.

<?
 $service_port = 21; 
 $address = gethostbyname('ftp1.corbina.ru');
 $timeout = 10; 

 $ftp = @fsockopen($address, $service_port, $errno, $errstr, $timeout);

 if (!$ftp)
 {
 echo ('server down');
 }
 else
 {
 echo ('server up');
 }

?>

 

Ваш код интереснее и прозрачнее, но вот одна проблемма возникла сейчас у меня фтп и сайт на одном хостинге и соответственно определяет он не состояние фтп

а состояние вэб сервера.

 

 

Подскажите, я использовал вот такой код, но при этом значек получается смещённым в сторону и далеко от заголовка(скриншот в прикрепленном файле).

 

 

<?

$ns -> tablerender(SITEBUTTON_MENU_FTP1);

$service_port = 21;

$address = gethostbyname('1uwb.myftp.org');

$timeout = 1;

$ftp = @fsockopen($address, $service_port, $errno, $errstr, $timeout);

if (!$ftp)

{

echo ('<img src="/e107_plugins/ftpchecker_menu/off.gif" border=0 alt="Server DOWN">');

}

else

{

echo ('<img src="/e107_plugins/ftpchecker_menu/on.gif" border=0 alt="Server UP">');

 

}

?>

 

 

Скажите, как изменить код, что бы иконка отображалась по центру и сразу под заголовком.

 

Как можно ускорить загрузку страницы, а то это время стало равно секундам...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Ваш код интереснее и прозрачнее, но вот одна проблемма возникла сейчас у меня фтп и сайт на одном хостинге и соответственно определяет он не состояние фтп

а состояние вэб сервера.

 

Хм... очень странно... ведь мы определяем оффлайн/онлайн по конкретному порту - 21, порту фтп...

попробуйте запретить этот порт и разрешить только для фтп сервера в своем фаерволле

 

<?

$ns -> tablerender(SITEBUTTON_MENU_FTP1);

$service_port = 21;

$address = gethostbyname('1uwb.myftp.org');

$timeout = 1;

$ftp = @fsockopen($address, $service_port, $errno, $errstr, $timeout);

if (!$ftp)

{

echo ('<img src="/e107_plugins/ftpchecker_menu/off.gif" border=0 alt="Server DOWN">');

}

else

{

echo ('<img src="/e107_plugins/ftpchecker_menu/on.gif" border=0 alt="Server UP">');

 

}

?>

 

Скажите, как изменить код, что бы иконка отображалась по центру и сразу под заголовком.

 

Как можно ускорить загрузку страницы, а то это время стало равно секундам...

 

может подписать <div align=center>...</div>

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хм... очень странно... ведь мы определяем оффлайн/онлайн по конкретному порту - 21, порту фтп...

попробуйте запретить этот порт и разрешить только для фтп сервера в своем фаерволле

Спасибо, настроил.

 

может подписать <div align=center>...</div>

 

Я пробывал но все равно остается между заголовгом и имэджом пустая строка, а как от неё избавится непойму. :)

 

Вот можете посмотреть как это выглядит http://uwb.myftp.org/. Все замечательно, но вот только визуально bv'l; оторван от заголовка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот можете посмотреть как это выглядит http://uwb.myftp.org/. Все замечательно, но вот только визуально bv'l; оторван от заголовка.

 

div - это не инлайн объект... (если конечно такое в стиле не указано) => он и так переводит на след. строку

 

 

<div class="caption3">Статус FTP сервера</div></div><div class="bodytable3"></div><br><div align="center"><img src="/e107_plugins/ftpchecker_menu/on.gif" alt="FTP server UP" border="0"></div><br>

<div class="border3"><div class="caption3">События в 20

 

если убрать это бр, то все встает на свои места

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

loopa, чуть чуть опоздал ;)

и имхо <div class="bodytable3"></div> надо оставить

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах