Браузерный терминал в панели хостинга очень удобен для коротких задач: проверить права на файл, распаковать небольшой архив или выполнить одну команду можно без установки отдельной программы. Но как только работа затягивается, начинаются проблемы: окно, оставленное без действия на несколько минут, закрывается само, импорт большой базы обрывается на середине, и непонятно, чем всё закончилось. Это не ошибка, а естественное ограничение браузерного терминала. Ниже разберём причины разрывов и правильный способ выполнять долгие задачи.
Как устроен браузерный терминал
Терминал в панели — это посредник между вашим браузером и сервером. Каждый введённый символ передаётся через веб-страницу в панель, а оттуда — в процесс shell на сервере. В этой цепочке несколько звеньев, и у каждого свои тайм-ауты: сессия панели, веб-сервер или прокси, сам браузер и ваше интернет-соединение. Если оборвётся любое звено, терминал закроется, а запущенная в нём команда, как правило, тоже остановится.
Основные причины разрывов
Тайм-аут бездействия
Многие прокси и веб-серверы закрывают соединение, по которому какое-то время не передавались данные. Если вы запустили долгую команду, которая ничего не выводит, соединение со стороны терминала выглядит «молчащим» и обрывается по достижении лимита. Сессия панели тоже может через определённое время потребовать повторного входа.
Браузер и компьютер
Браузеры «усыпляют» фоновые вкладки, чтобы экономить ресурсы. Если закрыть крышку ноутбука или компьютер уйдёт в сон, соединение гарантированно оборвётся. Случайное обновление страницы тоже теряет сессию терминала.
Сеть и NAT
Домашний роутер или сеть мобильного оператора удаляют из своих таблиц TCP-соединения, которые долго молчат. В мобильном интернете соединение рвётся и при смене IP-адреса или переключении с Wi-Fi на мобильную сеть. В таких случаях даже обычный SSH-клиент выдаёт сообщение вроде client_loop: send disconnect: Broken pipe.
Команда умирает вместе с сессией
Самое важное: при закрытии терминала процессу shell отправляется сигнал SIGHUP, и запущенные из него команды обычно завершаются. То есть разрыв — это не просто неудобство, а риск получить наполовину выполненный импорт, недоархивированную папку или сломанную миграцию.
Решение 1: настоящий SSH-клиент и keepalive
Для долгой работы используйте вместо браузера обычный SSH-клиент: терминал Linux и macOS, PowerShell или Windows Terminal в Windows. Чтобы соединение не обрывалось от молчания, клиент должен каждые несколько секунд отправлять небольшой сигнал «я на связи». Удобно прописать это в файле ~/.ssh/config:
Host misol
HostName server.misol.uz
User user123
Port 22
ServerAliveInterval 30
ServerAliveCountMax 4
Здесь ServerAliveInterval 30 отправляет сигнал каждые 30 секунд, а ServerAliveCountMax 4 считает соединение потерянным после 4 сигналов подряд без ответа. Для разового подключения ту же настройку можно задать в командной строке: ssh -o ServerAliveInterval=30 user123@server.misol.uz. В PuTTY это поле «Seconds between keepalives» в разделе Connection.
Решение 2: работать внутри tmux или screen
Keepalive защищает от сетевой тишины, но если ноутбук уснул или интернет пропал полностью, соединение всё равно оборвётся. Для этого нужен терминальный мультиплексор. tmux открывает сессию на сервере, и она продолжает работать, даже если вы отключились; при повторном подключении вы возвращаетесь туда же. Сначала проверьте, что он есть на сервере, — он установлен не на каждом хостинге:
which tmux screen
tmux new -s import # открыть новую сессию
# ... запустите здесь долгую команду ...
# Ctrl+B, затем D — отсоединиться (команда продолжит работу)
tmux attach -t import # подключиться снова
screen работает так же: открывается через screen -S import, отсоединяется сочетанием Ctrl+A, затем D, а подключается снова командой screen -r import.
Решение 3: запуск в фоне через nohup
Если нет ни tmux, ни screen, поможет nohup. Он делает процесс нечувствительным к сигналу SIGHUP, а & в конце отправляет его в фон. Обязательно перенаправьте вывод в файл, чтобы прочитать его в любой момент:
nohup sh -c 'gunzip < ~/backup/baza.sql.gz | mysql --defaults-extra-file=$HOME/.my.cnf misol_db' > ~/import.log 2>&1 &
tail -f ~/import.log
Чтобы не писать пароль базы в командной строке, его кладут в файл ~/.my.cnf и закрывают доступ командой chmod 600. После завершения работы файл можно удалить. Проверить, что процесс ещё идёт, можно командой ps ux.
[client]
user=misol_user
password=здесь-пароль-базы
Пример: импорт базы интернет-магазина
Разработчик, переносивший с другого хостинга сайт магазина одежды из Намангана, попытался импортировать SQL-дамп объёмом 1,5 ГБ через терминал панели. Импорт несколько минут шёл молча, после чего терминал закрылся. Зайдя снова, он увидел в базе только половину таблиц, причём последняя была записана не до конца. Во второй раз он подключился со своего компьютера по SSH с настроенным keepalive, открыл сессию tmux и запустил импорт там. В дороге интернет дважды пропадал, но каждый раз после tmux attach импорт продолжался и в итоге завершился без ошибок.
Какой инструмент для какой задачи
| Задача | Рекомендация |
|---|---|
| Одна-две короткие команды | Хватит терминала панели |
| Интерактивная работа на несколько минут | SSH-клиент + keepalive |
| Большой импорт, архивация, миграция | SSH + tmux или screen |
| tmux нет, задача долгая | nohup + лог-файл |
На хостинге sayt.uz вход в панель выполняется из кабинета sayt.uz, а SSH работает, если он включён на вашем тарифе. Если даже SSH с настроенным keepalive регулярно отключается, отправьте в техподдержку время разрыва и вывод ssh -v — так проще понять, где проблема: в сети или на стороне сервера.