Хостинг панелидаги браузер терминали қисқа ишлар учун жуда қулай: файл рухсатини текшириш, кичик архивни очиш ёки битта буйруқни бажариш учун алоҳида дастур ўрнатиш шарт эмас. Лекин узоқроқ ишлаш бошланиши билан муаммо чиқади: бир неча дақиқа ҳаракатсиз қолган ойна ўз-ўзидан ёпилади, катта базани импорт қилиш ўртасида уланиш узилади ва иш нима бўлганини билмай қоласиз. Бу хато эмас, балки браузер терминалининг табиий чеклови. Қуйида узилишларнинг сабабларини ва узоқ ишлар учун тўғри йўлни кўриб чиқамиз.
Браузер терминали қандай ишлайди
Панелдаги терминал аслида сизнинг браузерингиз ва сервер ўртасидаги воситачи. Сиз ёзган ҳар бир белги веб-саҳифа орқали панелга, у ердан сервердаги shell жараёнига узатилади. Бу занжирда бир нечта бўғин бор ва уларнинг ҳар бири ўз вақт чегарасига эга: панел сессияси, веб-сервер ёки прокси, браузернинг ўзи ва сизнинг интернет уланишингиз. Занжирнинг исталган қисми узилса, терминал ёпилади ва унда ишга туширилган буйруқ ҳам одатда тўхтайди.
Узилишнинг асосий сабаблари
Ҳаракатсизлик вақти чегараси
Кўп прокси ва веб-серверлар маълум вақт давомида маълумот алмашинмаган уланишни ёпади. Агар сиз узоқ ишлайдиган буйруқни ишга тушириб, у ҳеч нарса чиқармаса, терминал томонидан қараганда уланиш "жим" бўлиб қолади ва чегарага етгач узилади. Панел сессиясининг ўзи ҳам маълум вақтдан кейин қайта киришни талаб қилиши мумкин.
Браузер ва компьютер
Браузерлар фондаги ёрлиқларни ресурс тежаш учун "ухлатиб" қўяди. Ноутбук қопқоғи ёпилса ёки компьютер уйқу режимига ўтса, уланиш албатта узилади. Саҳифани тасодифан янгилаш ҳам терминал сессиясини йўқотади.
Тармоқ ва NAT
Уй роутери ёки мобил оператор тармоғи узоқ вақт жим турган TCP уланишларини ўз жадвалидан ўчириб юборади. Мобил интернетда IP манзил алмашиниши ёки Wi-Fi'дан мобил тармоққа ўтиш ҳам уланишни узади. Бундай ҳолларда оддий SSH мижозида ҳам client_loop: send disconnect: Broken pipe каби хабар чиқади.
Буйруқ сессия билан бирга ўлади
Энг муҳим нуқта шу: терминал ёпилганда сервер shell жараёнига SIGHUP сигнали юборилади ва ундан ишга туширилган буйруқлар одатда тўхтайди. Яъни уланиш узилиши фақат ноқулайлик эмас — у ярим қолган импорт, чала архивланган папка ёки бузилган миграцияга олиб келиши мумкин.
Ечим 1: ҳақиқий SSH мижози ва keepalive
Узоқ иш учун браузер ўрнига оддий SSH мижозидан фойдаланинг: Linux ва macOS терминали, Windows'да PowerShell ёки Windows Terminal. Уланиш жим қолиб узилмаслиги учун мижоз ҳар бир неча сонияда кичик "тирикман" сигналини юборсин. Буни ~/.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'да бу Connection бўлимидаги "Seconds between keepalives" майдони орқали созланади.
Ечим 2: tmux ёки screen ичида ишлаш
Keepalive тармоқ жимлигидан ҳимоя қилади, лекин ноутбук уйқуга кетса ёки интернет бутунлай ўчса, уланиш барибир узилади. Бундай ҳолат учун терминал мультиплексори керак. tmux серверда сессия очади ва сиз узилиб қолсангиз ҳам у ишлашда давом этади; қайта уланганингизда худди ўша жойга қайтасиз. Аввал серверда мавжудлигини текширинг, чунки у ҳар бир хостингда ўрнатилмаган бўлиши мумкин:
which tmux screen
tmux new -s import # yangi sessiya ochish
# ... uzoq buyruqni shu yerda ishga tushiring ...
# Ctrl+B, keyin D — sessiyadan chiqish (buyruq ishlashda davom etadi)
tmux attach -t import # qayta ulanish
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=bu-yerga-baza-paroli
Амалий мисол: интернет-дўкон базасини импорт қилиш
Намангандаги кийим дўкони сайтини бошқа хостингдан кўчираётган дастурчи 1,5 GB ҳажмли SQL дампни панел терминали орқали импорт қилмоқчи бўлди. Импорт бир неча дақиқа жим ишлади, сўнг терминал ёпилди. Қайта кирганда базада жадвалларнинг фақат ярми бор эди, охиргиси эса чала ёзилган эди. Иккинчи уринишда у компьютеридан keepalive созланган SSH билан уланди, tmux сессиясини очди ва импортни ўша ерда бошлади. Йўлда интернет икки марта узилиб қолди, лекин ҳар сафар tmux attach билан қайтганда импорт давом этаётган эди ва охирида хатосиз тугади.
Қайси иш учун қайси восита
| Вазифа | Тавсия |
|---|---|
| Бир-икки қисқа буйруқ | Панел терминали етарли |
| Бир неча дақиқалик интерактив иш | SSH мижози + keepalive |
| Катта импорт, архивлаш, миграция | SSH + tmux ёки screen |
| tmux йўқ, иш узоқ | nohup + лог файл |
sayt.uz хостингида панелга sayt.uz кабинетидан кирасиз, SSH эса тарифингизда ёқилган бўлса ишлайди. Агар SSH билан уланиш ҳам keepalive созланганига қарамай мунтазам узилса, уланиш вақти ва ssh -v чиқишини техник ёрдамга юборинг, шунда муаммо тармоқдами ёки сервер томонидами аниқлаш осонроқ бўлади.