LINUX.ORG.RU

Сообщения Jaels

 

Java SocketException: Unexpected end of file from server

Форум — Development

Поймал очень странную проблему с соединением по HTTP из JAVA приложения.

Задача: с клиента A необходимо получить ответ на HTTP запрос от веб-сервера Б (10.13.0.69)

Важный момент: сервер Б находится за VPN туннелем, при этом все сетевые правила корректно настроены и клиенту A обеспечен доступ к серверу Б. Это легко проверить тем-же curl'ом:

[root@Test-LAPP01 test]# curl http://10.13.0.69:7878/testGet && echo ""
{"result":["\"AlertServer testGet ok\" "]}

Проблемы начинаются когда я пытаюсь выполнить тот-же самый запрос из java приложения: оно падает с ошибкой

SocketException: Unexpected end of file from server.

Естественно сначала я предположил, что проблема в JAVA коде, но если изменить url например на http://google.com, то приложение отрабатывает нормально.

Ещё интересный момент: если java приложение запускать в одной подсети с сервером Б (т.е. без VPN туннеля), то запрос также отрабатывает без проблем.

В качестве дебага запустил tcpdump на обоих машинах и теперь я смущён ещё больше: я вижу, что пакеты как уходят с клиента A, так и приходят на веб-сервер Б

Непосредственно сама ошибка:

[root@Test-LAPP01 test]# cat contest.java
import java.net.*;
import java.io.*;

public class contest {
        public static void main(String[] args) throws Exception {
                String url = "http://10.13.0.69:7878/testGet";
                try {
                        URL alert = new URL(url);
                        HttpURLConnection con = (HttpURLConnection) alert.openConnection();
                        con.setRequestMethod("GET");
                        con.setRequestProperty("User-Agent", "chrome");
                        int responseCode = con.getResponseCode();
                        System.out.println("\nSending 'GET' request to URL : " + url);
                        System.out.println("Response Code : " + responseCode);
                }
                catch (IOException e) {
                        e.printStackTrace();
                }
        }
}


[root@Test-LAPP01 test]# curl http://10.13.0.69:7878/testGet && echo ""
{"result":["\"AlertServer testGet ok\" "]}


[root@Test-LAPP01 test]# java contest
java.net.SocketException: Unexpected end of file from server
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:851)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:678)
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:848)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:678)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1587)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
        at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
        at contest.main(contest.java:12)

[root@Test-LAPP01 test]#

tcpdump с клиента: https://dpaste.de/brNW

tcpdump на сервере: https://dpaste.de/1O2b

Кратко суть проблемы: Из JAVA приложения недоступен URL, размещённый за VPN, но доступен с хостового ПК.

 , , ,

Jaels
()

keepalived и метод HTTP_CHECK

Форум — Admin

Добрый день. Есть балансировщик keepalived с одним VIP'ом и 2 бекендами (real_server). Сейчас использую в качестве метода проверки доступности бекендов TCP_CHECK и проблем нет. Хочется перейти на более продвинутую логику проверки доступности, а именно HTTP_CHECK.

Ожидание: keepalived знает контрольную сумму каждой страницы, которую использует для тестирования и при её изменении (что может вызвано, как падением сервиса, так и изменением содержимого веб-страницы) выключает этот real_server из балансировки.

Реальность: keepalived корректно обрабатывает падение (видимо основываясь на возвращаемом HTTP Status code), но полностью игнорирует изменение контрольной суммы, если меняется содержимое веб-страницы.

Конфиг keepalived - https://pastebin.com/raw/k7PJpJMH

Подозреваю, что скорее всего какой-то ошибкой в синтаксисе конфига, но не могу её отловить. На эту мысль меня наталкивает ошибка в логах keepalived при его старте (но ошибка не фатальная, т.к. сервис keepalived запускается и работает, за исключением проверки контрольной суммы)

Mar 20 09:41:15 test-lb01 Keepalived_healthcheckers[1752]: Initializing ipvs
Mar 20 09:41:15 test-lb01 Keepalived_healthcheckers[1752]: Opening file '/etc/keepalived/keepalived.conf'.
Mar 20 09:41:15 test-lb01 Keepalived_healthcheckers[1752]: Unknown keyword 'digitest'
Mar 20 09:41:15 test-lb01 Keepalived_healthcheckers[1752]: Unknown keyword 'digitest'

Контрольная сумма проверяемых страницы получалась таким образом:

genhash --server 192.168.19.47 --port 80 --url /index.html
genhash --server 192.168.19.41 --port 80 --url /index.html

 ,

Jaels
()

Проблема с аргументом rsync files-from

Форум — Admin

Всем добрый день. Наблюдаю странное поведение rsync'a, который игнорирует список файлов для копирования из аргумента files-from.

Задача: скопировать файлы, не старше двух дней, из одного кататалога в другой.

#!/bin/bash
cd /mnt/smb/online/
find . -mtime -2 -print > /tmp/rsynclist
rsync -av --ignore-existing --size-only --files-from=/tmp/rsynclist /mnt/smb/online /mnt/backup/

Т.е. сначала я нахожу find'ом все файлы не старше двух дней, кидаю их в файл /tmp/rsynclist и далее rsync'ом забираю эти файлы.

Проблема в том, что rsync игнорирует аргумент files-from и копирует вообще все файлы из исходного каталога.

Всем заранее спасибо за подсказку. Где я ошибся?

 , , ,

Jaels
()

Centos выполнение скрипта при загрузке.

Форум — Admin

Добрый день. Есть некий скрипт, который дергается при старте системы systemd юнитом. Скрипт служит для бекапа файлов с удаленной smb шары.

Т.е. логика такая - cистема запускается и начинает читать юниты:

1. Юнит монтирования удаленной шары:

[Unit]
Description=CIFS Share from spr1-backup01
After=network-online.target

[Mount]
What=//192.168.18.12/oracle_backup
Where=/mnt/smb
Type=cifs
Options=ro,vers=2.1,credentials=/root/creds/.cred_oralocalsys

[Install]
WantedBy=multi-user.target

2. Юнит, который запускает скрипт бекапа

[Unit]
Description=Backup oracle database
After=mnt-smb.mount

[Service]
Type=simple
ExecStart=/root/nas/sender.sh
StandardOutput=journal

[Install]
WantedBy=multi-user.target

Проблема в том, что если скрипт /root/nas/sender.sh (его исходник в самом начале по ссылке) запускается руками - всё работает замечательно.

Но если скрипт запускается при старте (через systemd unit), то не проходит непосредственно сама процедура резервной копии (та часть, которая вызывается rsync'ом).

При этом в самом скрипте уже есть проверка на то, примонтирована ли шара откуда мы копируем данные.

Может подскажете куда копать или возможно подскажете способ детально посмотреть лог загрузки и выполнения юнитов.

 , , ,

Jaels
()

Посоветуйте сервис бекапа

Форум — General

Всем доброго времени суток. Подскажите бекап-решение, которое:

1. Сделает бекап определенного каталога, пропуская файлы, который были скопированы ранее.

2. Вышлет отчет на почту.

3. После выполнения бекапа может запустить некоторые custom скрипты.

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

Я написал примерно такое на баше + rsync, но мне не очень нравится его работа. Возможно есть готовое решение уже.

 

Jaels
()

Передача файлов более 2гб на windows шару

Форум — Admin

Здравствуйте. Столкнулся с такой проблемой: При копировании файла, размером более 2гб, на смонтированную windows шару файл обрезается как-раз по эти 2 гб. Такая проблема ещё давно проявлялась, если монтирование производилось через smbfs и все советовали использовать cifs, что снимает ограничение. Но даже через CIFS наблюдаю у себя эту проблему. ОС - Oracle linux http://imgur.com/8l1w60k

 , ,

Jaels
()

Восстановление файлов

Форум — Admin

Здравствуйте, суть проблемы.
После смены материнской платы перестал загружаться Debian, 3 суток пытался поднять - не получилось.
Установил систему на новый жесткий диск.
Теперь надо как-то перекинуть все данные со старого, исключая саму ОС.
По сути - сделать полное копирование диска, но само копирование естественно делать нельзя, потому, что сис-ма не загрузится.

Можете подсказать что-то?

Jaels
()

Проблема с bash скриптом

Форум — Admin

Здравствуйте. Подскажите, пожалуйста решение для скрипта.

Имеется несколько фтп серверов, надо с них забирать файл config.ini ( присутствует на каждом сервере ) и переименовывать его в $servername.config.ini Адреса, пароли и логины есть в файле database. вот пример его структуры:

admin:1234@192.168.0.1
admin:1234@192.168.0.2
admin:1234@192.168.0.3

Также есть файл с именами серверов (server_name). с такой структурой;

ftp1
ftp2
ftp3

Каждое имя сервера в строке соответствует его ip адресу в файле database.

Файлы я забираю таким скриптом:

#!/bin/bash
for FTP_ADDR in `cat /root/jaels/scripts/base`
do
    wget ftp://$FTP_ADDR/config.ini
done

Но проблема в том, что скрипт забирая файл с 1-го фтп, сразу переходит к второму и заменяет уже полученный config.ini на config.ini с друго ФТП.

Собственно надо реализовать переименовывание файла сразу после получения (добавлять к нему имя сервера, которое берется из файла server_name. )

Jaels
()

не ведутся логи php

Форум — Admin

Добрый день. Есть на сайте много php скриптов, один из них не выполняется. php_errors.log полностью пустой. По скрипту вопросов нет, но подскажите, как заставить php вести логи? Напишу, что уже пробовал.

в php.ini прописаны такие директивы, как log_errors=1 error_log=/home/username/logs/php_error.log

указывал уже через .htaccess директивами: php_flag log_errors on php_value error_log /home/username/logs/php_error.log

в начало нужного php скрипта вписывал: ini_set('display_errors', true); error_reporting(E_ALL);

Владелeц файла - тот самый username, права на него 0644

Jaels
()

Redirect через mod_rewrite

Форум — Admin

Доброго времени суток. Помогите с настройкой mod_rewrite.

Задача: надо, чтобы пользователь, при вводе IP адреса сервера с сайтом автоматически редиректился на DNS имя. ------ Всем заранее спасибо.

Jaels
()

RSS подписка на новые темы