Назад | Перейти на главную страницу

Соединение ssh прервано во время выполнения интерактивной команды psql - завершится ли команда? Могу я переподключиться?

Я использовал интерактивный psql для выполнения переиндексации в одной из наших баз данных. К сожалению, соединение ssh разорвалось, пока работала переиндексация, и я по глупости не поместил psql в экранное окно (я не понимал, сколько времени это заняло!)

Как только мне удалось снова войти в систему, я запустил

ps aux | grep REINDEX 

и вывод, казалось, указывал, что переиндекс все еще выполняется:

postgres  6180 99.9  0.0 774960  4804 ?        Rs   Jun27 3022:02 postgres: postgres my_db_name [local] REINDEX 

Каково ожидаемое поведение postgres в этой ситуации? Будет ли он продолжать выполнять переиндексирование до завершения?

Кроме того, есть ли способ повторно подключиться к psql таким образом, чтобы я мог продолжать видеть незавершенный вывод переиндексации?

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

Это одно из обстоятельств, при которых вам следует использовать что-то вроде GNU Screen. С помощью GNU Screen вы входите на свой сервер, набираете screen, а затем приступайте к работе. Вы можете создать дополнительные терминалы внутри этого сеанса экрана с помощью Ctrl + a c , и переключаться между ними с помощью Ctrl + n и Ctrl + p. Чтобы отключиться от экрана GNU, введите Ctrl + a d. Для повторного подключения вы можете войти в систему и запустить screen -r .

Практическое руководство от Kuro5hin доступно здесь: http://www.kuro5hin.org/story/2004/3/9/16838/14935

REINDEX может быть прерван, поскольку он пытается отправить обратную связь в psql, который больше не существует, и это, наконец, распространяется как «клиент отключен». Или, если psql все еще существует, он, наконец, умрет, когда его буферы tty и sshd переполнятся ... это, по-видимому, займет больше времени.

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