держать программу в ssh работающей при потере сети

У меня проблема, как заставить мою программу работать в ssh, когда ноутбук (Mac) теряет Wi-Fi-соединение или сеть. Я запускал программу Python удаленно по ssh на сервер, и перед запуском кода я сделал новый экран, введя «экран». Затем я запустил программу и нажал ctrl+A+D, чтобы отсоединить экран. Все выглядело нормально, и программа продолжала работать, когда ноутбук был закрыт (в месте с WIFI). Однако, когда я вышел на улицу со своим ноутбуком на несколько минут и снова открыл ноутбук, он показал «ошибка записи: сломанная труба», и программа остановилась. Я предполагаю, что проблема возникла из-за того, что ноутбук потерял сетевое соединение. Есть ли способ решить эту проблему, чтобы я мог взять свой ноутбук куда угодно и сохранить свою программу?


person lienahu    schedule 12.11.2014    source источник


Ответы (1)


Откройте screen на удаленном сервере после входа по SSH, чтобы у вас был постоянный сеанс там, а не на вашем локальном компьютере.

Если вы это сделали, обратите внимание, что вы все равно будете отключены, если потеряете соединение, но затем снова подключитесь по SSH и повторно откроете сеанс screen, чтобы вернуться к работе.

local$ ssh remote.server
remote$ screen -ls # list screens
remote$ screen -dr <screen name> # force reconnect to screen session

изменить:

Используя screen, вы получаете постоянную сессию, которую можно восстановить. Эти сеансы будут жить там, где вы их начнете. Если вы хотите убедиться, что вы продолжаете запускать что-то на удаленном сервере, то сначала SSH, а затем запустите screen на удаленном сервере.

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

Попробуй это:

local$ ssh remote.server
remote$ screen -S date
# screen starts with name 'date'. if it's the first time you start screen on
# this box it might display some welcome message where you need to press enter

remote-screen$ while true; do date; sleep 1; done
# this will show the time every second

# disconnect your network: the ssh connection will be terminated
# open console again and continue

local$ ssh remote.server
remote$ screen -dr date

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

person fejese    schedule 12.11.2014
comment
Благодарю. Итак, я должен сначала подключиться к серверу по ssh, затем открыть экран и запустить программу? Порядок не должен быть изменен правильно? И если я потеряю сетевое соединение, программа на сервере перестанет работать. Но если я снова зайду по ssh в сервер, программа продолжит работать. Это то, что ты имеешь в виду? - person lienahu; 12.11.2014