Как смоделировать отключенный сетевой кабель или отключенный сервер?


14

Я симулировал задержку в сети с помощью netem, и это здорово. Теперь я хочу смоделировать отключенный сетевой кабель или когда сервер выходит из строя. Мне нужно это, чтобы упростить тестирование моего приложения, и я не смог найти в Интернете ничего, что могло бы мне помочь. Мои серверы являются виртуальными экземплярами CentOS и находятся в Virtualbox. Я хочу сделать это с веб-страницы php.

Ответы:


17

Просто опустите интерфейс. Например, с eth0:

ip link set eth0 down

Чтобы восстановить интерфейс:

ip link set eth0 up

спасибо, я читаю об этом здесь
SafeY

1
это работает успешно, но ip link set eth0 upне работает :( и я нуждаюсь в них обоих
SafeY

@NancySmith "Не работает" не имеет смысла. Какие сообщения об ошибках появляются? Вы назначили IP и маску сети?
Крис Даун

Я имею в виду, что я использовал ip link set eth0 downчерез php и ping показывает, что мой сервер недоступен. затем я хотел вернуть его обратно "вверх", я выполнял ip link set eth0 upчерез php и сервер все еще не работает.
SafeY

3
@NancySmith Создайте другой сетевой интерфейс, который не имеет доступа к тому, к чему он подключается (используя маршруты и т. Д.). SSH к хосту, использующему этот интерфейс. Отключите интерфейс, через который вы не подключаетесь к SSH.
Крис Даун

7

При использовании ответа с наибольшим количеством голосов на компьютере, к которому вы подключаетесь через SSH, вы отключите сеть и не сможете восстановить его. Ниже приведен способ выключения и восстановления, когда вы подключены по SSH.

Пример использования интерфейса ens32:

Если вы запускаете:

ip link set ens32 down

И вы подключаетесь через SSH, вы не сможете восстановить его снова, так как вы отключили свою сеть и, следовательно, не можете подключиться по SSH к вашему серверу.

Я использую следующий скрипт для симуляции 20 секунд простоя:

#!/bin/sh
ip link set ens32 down
sleep 20
ip link set ens32 up

Сохраните его как downtime.sh, убедитесь, что у файла есть права на выполнение, а затем запустите:

sudo ./downtime.sh

1
хорошая вещь. Также релевантная ссылка для тех, кто не уверен, какой интерфейс отключен: unix.stackexchange.com/questions/125400/…
Jeutnarg

1
эээ ... я новичок в Linux, но я думаю, что здесь может быть какой-то дурной совет: если вы не включите этот скрипт, то произойдет, что вы его выполните, сеанс умирает (из-за отключения), и сценарий останавливается ( и никогда не оживляет сетевой интерфейс). Я думаю, что чтение вокруг nohup должно быть ценным!
DraxDomax

@DraxDomax то, что вы говорите, звучит логично, но у меня не было проблем с тем, чтобы он не вернулся. Принимая во внимание, что у меня были проблемы с принятым ответом.
Дразнящий

@Mocking Извините, я не смог отредактировать свой комментарий. Это не обязательно «плохой совет». На самом деле это хороший проактивный ответ, потому что 90% людей, которые найдут этот вопрос, пытаются сделать то же самое: «Мне нужно проверить, работает ли мое программное обеспечение после отключения компьютера. У меня нет доступа к хосту виртуализации» , На самом деле, я прибег к вашему сценарию (только мой адаптер был br0) - он не работал в моем случае (SSH от MacOS до CentOS), и мне пришлось позвонить нашему ИТ-специалисту, чтобы снова подключить сеть.
DraxDomax

1

В окне консоли вашего виртуального ящика у вас должно быть выпадающее меню Machine. Под этим есть несколько действий. Одним из которых является отключение питания. Вам нужно выбрать его для немедленного отключения питания. Это самая близкая вещь к рывку шнура питания физического сервера.


Я хочу сделать это с веб-страницы. Ужасно я знаю, как выключить машины.
SafeY

и я не хочу притворяться не совсем выключи и загрузи его снова.
SafeY

Судя по упоминанию netem, я предполагаю, что вопрос действительно в том, чтобы отключить сетевой кабель от сервера, а не кабель питания (хотя это не ясно).
Крис Даун

Я отредактирую свой вопрос, чтобы сделать его более понятным, спасибо
SafeY
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.