Eğitimler

tmux: SSH bağlantısı kesilmeden sunucuda uzun süren işleri çalıştırma

SSH kapatıldığında uzun süren komutunuz ölüyorsa, burada tmux ile kalıcı bir oturum oluşturmayı, yeniden bağlanmayı ve işi canlı tutmayı öğreneceksiniz.

Eğitimler

mysqldump komutunu çalıştırdınız, ilerleme çubuğu yavaşça ilerliyor ve dizüstü bilgisayar pilde. Wi-Fi bir anlığına kesiliyor. Yeniden bağlanıyorsunuz ve sürecin öldüğünü, dump dosyasının yarım kaldığını görüyorsunuz. İşte tam bu noktada tmux devreye giriyor: bir kabuğu terminalinizden bağımsız bir oturum içinde tutan küçük bir program. SSH kesildiğinde oturum kalır ve komut da kalır.

Farkı nohup ve & ile açıklayayım çünkü çoğu kişi bu ikisini karıştırıyor. nohup yalnızca HUP sinyalini engeller ve süreci terminalden ayırır, ancak artık işin ortasında ona bakamaz veya girdi veremezsiniz. tmux size istediğiniz zaman geri dönebileceğiniz gerçek bir terminal verir. Veritabanı taşıma, yüz gigabaytlık dosyalar üzerinde rsync veya uzun süren bir derleme gibi işler için bu fark hayatidir.

SSH kesildiğinde doğrudan çalıştırılan komut neden ölür

SSH üzerinden bağlandığınızda, kabuğunuz SSH oturumunun bir alt sürecidir. Bağlantı kesildiği anda çekirdek o terminalin süreçlerine SIGHUP sinyali gönderir. Ön plandaki süreçler bu sinyali alır ve ölür. Şanslıysanız yalnızca iş yarım kalır; şanssızsanız bir veritabanı tablosu yarı taşınmış durumda takılır ve yedekten geri dönmeniz gerekir.

Belirtisi de açıktır: kesilme ve yeniden bağlanmadan sonra ps aux | grep mysqldump hiçbir şey döndürmez ve hata günlüğünüz de yoktur. Diskte yalnızca eksik bir dosya kalır.

tmux ile ilk kalıcı oturumu oluşturma

Çoğu dağıtımda kuruludur. Değilse:

apt install tmux        # Debian ve Ubuntu
dnf install tmux        # Red Hat ve Fedora

Şimdi belirli bir adla bir oturum oluşturun. Adlandırmayı ciddiye alın; üç oturum açıkken tmux ls adsız size yalnızca bir sürü anlamsız sayı gösterir.

tmux new -s backup

Oturuma giriyorsunuz. Uzun süren komutunuzu orada çalıştırın. Şimdi Ctrl+b ve ardından d tuşlarına basarak oturumdan ayrılın (detach). Oturum arka planda canlı kalır. Geri dönmek için:

tmux attach -t backup

Oturum adını unuttuysanız, tmux ls listeyi verir ve tmux attach -t 0 ile sıfır numaralı oturuma bağlanırsınız. Hepsi bu. Altı saatlik bir yedeği canlı tutmak için yapmanız gereken her şey tamamlandı.

Gerçekten kullanacağınız tuşlar

Tüm tmux komutları, varsayılanı Ctrl+b olan bir önek ile başlar. Şunları ezberleyin, gerisine ihtiyacınız yok:

  • Ctrl+b ardından d — oturumu kapatmadan ayrılma
  • Ctrl+b ardından c — aynı oturum içinde yeni pencere oluşturma
  • Ctrl+b ardından n ve p — sonraki ve önceki pencere
  • Ctrl+b ardından % — paneli dikey bölme
  • Ctrl+b ardından " — paneli yatay bölme
  • Ctrl+b ardından [ — önceki çıktıyı görmek için kaydırma moduna girme

Kaydırma modunu hafife almayın. Bir derleme bin satır günlük ürettiğinde ve siz yalnızca ortasındaki hatayı görmek istediğinizde, bu mod olmadan günlüğü dosyaya kaydetmeniz gerekirdi. Ctrl+b [ ile girersiniz, yön tuşlarıyla hareket edersiniz ve q ile çıkarsınız.

Burada hata yapıyorlar

Destek taleplerinde gördüğüm en yaygın hata şudur: kullanıcı tmux içinde çalışır, sonra terminal penceresini çarpı işaretine tıklayarak kapatır ve oturumun sunucuda kaldığını sanır. Bazı terminallerde bu işlem detach yerine gerçek bir SIGHUP gönderir ve oturumu öldürür. Belirtisi şudur: tmux ls size no server running on /tmp/tmux-1000/default der ve siz sunucunun yeniden başlatıldığını düşünürsünüz.

Doğru alışkanlık şudur: her zaman önce Ctrl+b d tuşlarına basın, sonra terminali kapatın. Emin değilseniz, detach işleminden sonra bir kez daha SSH ile bağlanın ve tmux ls komutunu kontrol edin.

İkinci hata: normal kullanıcı oturumu içinde sudo ile komut çalıştırmak. tmux oturumu onu oluşturan kullanıcıya aittir. sudo -u www-data tmux new -s deploy ile oturum oluşturursanız, sonradan kendi kullanıcınızla ona bağlanamazsınız ve no sessions hatası alırsınız. Servis odaklı işler için oturumu aynı sahip kullanıcıyla oluşturun.

tmux mu, screen mi, systemd mi?

Üçü de benzer işler yapar ve aralarındaki seçim zevke değil duruma bağlıdır.

AraçDoğru seçim olduğu yerMaliyeti
tmuxEtkileşimli iş, canlı hata ayıklama, yan yana birden fazla panelElle yönetmeniz gerekir; sunucu yeniden başlatıldıktan sonra oturum geri gelmez
screentmux kurulu olmayan eski sunucularTuşları daha kafa karıştırıcıdır ve geliştirmesi pratikte durmuştur
systemd serviceOtomatik başlaması ve yeniden başlatmadan sonra devam etmesi gereken işlerTek seferlik elle yapılan işler için fazla ağırdır

Sunucuda günlük işler için tercihim tmux. Ancak bir iş her gece saat üçte çalışacaksa ve yeniden başlatmadan sonra da geri gelmesi gerekiyorsa, tmux yanlış cevaptır; orada Restart=on-failure ile bir systemd unit dosyası yazın. tmux "şimdi, elle, bitene kadar" için tasarlanmıştır.

Az kişinin önceden bildiği gerçek bir sınırlamadan da bahsedeyim: tmux oturumları sunucu yeniden başlatıldıktan sonra kaybolur. Sunucu sıfırlanırsa tüm oturumlar gider. Saatler süren ve yeniden başlatma riski taşıyan işler için çıktıyı her zaman tee ile dosyaya yazın:

mysqldump -u root -p shop | gzip > /root/shop-$(date +%F).sql.gz

Bu şekilde oturum ölse bile nereye kadar ilerlediğini bilir ve devam edebilirsiniz.

Deneyimi değiştiren küçük ayarlar

~/.tmux.conf dosyasını oluşturun ve şu birkaç satırı içine koyun:

set -g mouse on
set -g history-limit 50000
set -g base-index 1
setw -g pane-base-index 1

İlk satır fare ile kaydırmayı ve tıklayarak panel seçmeyi etkinleştirir. İkinci satır geçmiş arabelleğini varsayılan 2000 satırdan 50000 satıra çıkarır; uzun günlükler için bu sayıya ihtiyacınız var. Son iki satır pencere numaralandırmasını sıfırdan bire taşır ki bu çoğu insan için daha doğaldır. Kaydettikten sonra tmux source-file ~/.tmux.conf ile uygulayın.

Paylaşımlı bir sunucuda çalışıyorsanız ve birkaç kişinin aynı oturumu görmesi gerekiyorsa, tmux bunu da destekler: tmux new -s shared ile oturum oluşturun ve diğerleri tmux attach -t shared ile aynı oturuma girsin. Her iki kişi de aynı görüntüyü görür ve her ikisi de yazabilir. Ortak bir sorun üzerinde birlikte hata ayıklamak için bu, ekran paylaşımından daha hızlıdır.

Sunucuyu yeni kurduysanız ve ortamı henüz hazırlamadıysanız, her şeyden önce dokümantasyon ve bilgi tabanına bir göz atın; başlangıç sunucu kontrol listeleri orada toplanmıştır. Komutları test etmek veya DNS kontrolü gibi daha hafif işler için ücretsiz araçlar SSH gerektirmeden işinizi görür. Ve tüm işiniz bir WordPress sitesi üzerindeyse ve kabuk oturumlarını yönetmekle uğraşmak istemiyorsanız, WordPress hosting ServerNet bu katmanı omuzlarınızdan alır.

Yeni kurulan sunucularla ilgili son bir not: kurulumdan sonra site açılmıyorsa ve sorunun DNS'te mi yoksa serviste mi olduğundan emin değilseniz, önce DNS_PROBE_FINISHED_NXDOMAIN hatasını kontrol edin, çünkü vakaların yarısında sorun aslında sunucu tarafında değildir.

Sıkça sorulan sorular

Komutumun hâlâ tmux içinde çalışıp çalışmadığını nasıl anlarım?

tmux ls ile canlı oturumların listesini görürsünüz ve tmux attach -t ad ile ona bağlanıp canlı çıktıyı görürsünüz. Oturum listede yoksa, ya detach edilmemiş ve SSH kesilmesiyle ölmüştür ya da sunucu yeniden başlatılmıştır.

Sunucu yeniden başlatıldıktan sonra tmux oturumları geri gelir mi?

Hayır. tmux oturumları sunucunun belleğinde yaşar ve yeniden başlatmayla kaybolur. Bir işin yeniden başlatmadan sonra da devam etmesi gerekiyorsa, onu bir tmux oturumu olarak değil, bir systemd servisi olarak tanımlamanız gerekir.

tmux ile nohup arasındaki fark nedir?

nohup yalnızca süreci terminal kesme sinyalinden ayırır ve sonrasında artık içine giremez veya girdi veremezsiniz. tmux, istediğiniz an bağlanabileceğiniz, kaydırabileceğiniz ve yeni komut çalıştırabileceğiniz eksiksiz ve geri dönülebilir bir terminal verir.

Bağlandıktan sonra ekran neden bozuk görünüyor?

Bu genellikle mevcut terminalin boyutu ile oturumun oluşturulduğu andaki boyutun farklı olması durumunda ortaya çıkar. Ctrl+b ve ardından : ile tmux komut satırına girin ve resize-window -A komutunu çalıştırın veya daha basitçe terminal penceresini bir kez küçültüp büyütün, kendisi boyutlanacaktır.

ServerNet Destek

ServerNet mühendislik ve yayın ekibi — altyapı, ağ ve web barındırma uzmanları.

WordPress Hosting
Paylaş:

Yorumlar 0

Henüz yorum yok — ilk siz olun!

Yorum bırakın

İlgili hizmet

WordPress Hosting

LiteSpeed Enterprise ve NVMe üzerinde WordPress'e özel altyapı — otomatik kurulum, güvenli güncelleme, staging ve sizi Google'da üstte tutan önbellek.