Перезапуск сети через ssh вызывает зависание

Я запускаю это:

ssh root@192.168.88.88 '/etc/init.d/networking restart'

Он работает и выводит результаты, но никогда не возвращается. Все же другие команды делают. Возможно, потому что сеть выходит из строя (как и предполагалось). Как я могу прекратить это? Я попытался добавить команду выхода, но без кубиков.

ОБНОВЛЕНИЕ: я заметил, что иногда это работает. Кажется, проблема возникает, если процесс прерывается, а конфигурация удаленного интерфейса находится в неизвестном состоянии. Я до сих пор не могу отследить, что именно привело к зависанию.

1
задан 14 February 2014 в 00:03

3 ответа

Возможно, команда restart прерывается при потере соединения (на первый взгляд, запрос системы перезапустить сетевое соединение по сети кажется опасным). Что бы вы хотели, чтобы networking restart работал независимо от управляющего терминала. Я бы добавил запись в crontab вот так (возможно, поместите ее в /etc/cron.d/checker-thingy):

* * * * * root /path/to/checker-thingy.sh

, тогда checker-thingy.sh будет выглядеть примерно так:

[ -f /tmp/restart-network ] && service networking restart
[ -f /tmp/restart-network ] && rm /tmp/restart-network

Это Это ужасно и склонно к другим проблемам, но в основном, как вы видите, он перезапустит сеть, если найдет определенный файл флага в /tmp (а затем удалит файл, чтобы избежать петли сброса сети).

Затем в вашем автоматическом скрипте вы можете сделать:

ssh server-ip 'touch /tmp/restart-network'

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

0
ответ дан 14 February 2014 в 00:03

Я наткнулся на эту очень интересную страницу: http://mywiki.wooledge.org/BashFAQ/063 . Команда ssh находится в ожидании закрытия выходных потоков удаленного процесса, поэтому она будет перехвачена при закрытии сети.

Итак (проверено):

ssh user@host "sleep 60 &" 

вернется через 60 секунд, тогда как

ssh user@host  "sleep 60 >/dev/null 2>&1 &" 

вернется сразу после запуска команды sleep в фоновом режиме.

Если это правильно, решение будет состоять в том, чтобы немедленно отключить стандартный вывод и ошибку от удаленной оболочки - вот так (не проверено, пожалуйста, проверьте):

ssh user@host '/etc/init.d/networking restart >/dev/null 2>&1 &' 

или если это все еще вызывает гонку между разрушением сети и закрытием оболочки,

ssh user@host '(sleep 10 && /etc/init.d/networking restart ) >/dev/null 2>&1 &'

должны работать.

0
ответ дан 14 February 2014 в 00:03

Удалите пакет shh, набрав

  • sudo apt-get remove ssh

и переустановите его:

  • sudo apt- получить установку SSH.
0
ответ дан 14 February 2014 в 00:03

Другие вопросы по тегам:

Похожие вопросы: