Cara Memakai screen dan tmux agar Proses Tidak Putus
Cara menjalankan proses panjang di server lewat screen atau tmux agar tidak berhenti saat SSH putus, plus tombol pintas yang paling sering dipakai.
Jawaban singkat
Jalankan proses panjang di dalam sesi tmux (tmux new -s nama) atau screen (screen -S nama). Lepas sesi dengan Ctrl+b d atau Ctrl+a d, lalu sambung lagi kapan saja dengan tmux attach atau screen -r. Proses tetap berjalan walau SSH putus.
Daftar isi
Kamu sedang mengimpor database berukuran besar lewat SSH. Progresnya sudah lewat setengah, lalu Wi-Fi kantor tersendat beberapa detik. Terminal membeku, koneksi putus, dan saat login lagi proses impornya sudah hilang. Kamu harus mengulang dari awal.
Hal ini terjadi karena proses yang dijalankan langsung di sesi SSH terikat pada sesi itu. Saat koneksi putus, shell menerima sinyal hangup dan biasanya ikut menghentikan proses di bawahnya. Solusinya adalah menjalankan proses di dalam terminal multiplexer seperti tmux atau screen. Keduanya membuat sesi terminal yang hidup di server, terpisah dari koneksi SSH-mu. Koneksi boleh putus, sesi dan prosesnya tetap jalan, dan kamu tinggal menyambung lagi.
Memasang tmux dan screen
Di Ubuntu dan Debian, keduanya tersedia di repositori utama:
sudo apt install tmux screen
Di AlmaLinux 9, tmux ada di repositori bawaan. Paket screen sudah tidak disertakan di repositori dasar sejak generasi RHEL 8, jadi perlu EPEL:
sudo dnf install tmux
sudo dnf install epel-release && sudo dnf install screen
Kalau baru mulai dan tidak terikat kebiasaan lama, tmux adalah pilihan yang lebih mudah ditemukan di distro modern. Screen tetap berguna karena sudah lama ada dan masih terpasang di banyak server lama.
Alur kerja dengan tmux
Buat sesi baru dan beri nama yang jelas:
tmux new -s impor-db
Kamu akan masuk ke terminal baru dengan bilah status hijau di bawah. Jalankan perintah panjangmu di sini, misalnya mysql nama_db < dump.sql.
Untuk keluar tanpa menghentikan proses, tekan Ctrl+b, lepaskan, lalu tekan d (detach). Kamu kembali ke shell biasa, sementara sesi tetap berjalan di server. Kalau koneksi SSH putus tanpa sengaja, efeknya sama seperti detach.
Setelah login lagi, lihat daftar sesi dan sambungkan kembali:
tmux ls
tmux attach -t impor-db
Di dalam satu sesi, tmux bisa punya beberapa jendela dan panel. Ctrl+b c membuat jendela baru, Ctrl+b n dan Ctrl+b p berpindah ke jendela berikut atau sebelumnya. Ctrl+b % membelah layar kiri-kanan, Ctrl+b " membelah atas-bawah, dan Ctrl+b diikuti tombol panah berpindah antarpanel. Ini praktis untuk memantau log di satu panel sambil menjalankan perintah di panel lain.
Untuk menggulir ke atas melihat keluaran lama, tekan Ctrl+b [, gunakan tombol panah atau Page Up, lalu tekan q untuk keluar dari mode gulir. Saat pekerjaan selesai, ketik exit di setiap jendela, atau matikan sesi dari luar dengan tmux kill-session -t impor-db.
Alur kerja dengan screen
Konsep screen sama persis, hanya tombol awalannya berbeda. Screen memakai Ctrl+a, bukan Ctrl+b.
screen -S impor-db # buat sesi bernama
# jalankan perintah, lalu tekan Ctrl+a kemudian d untuk detach
screen -ls # lihat daftar sesi
screen -r impor-db # sambung lagi
Bila screen menolak menyambung karena sesi masih dianggap terhubung (sering terjadi setelah koneksi putus mendadak), gunakan screen -d -r impor-db untuk melepas sambungan lama lalu menyambung dari terminalmu. Opsi screen -x menyambung ke sesi yang sama dari dua terminal sekaligus, berguna saat dua admin ingin melihat layar yang sama.
Di dalam screen, Ctrl+a c membuat jendela baru, Ctrl+a n berpindah ke jendela berikutnya, dan Ctrl+a [ masuk ke mode gulir. Ketik exit untuk menutup jendela, dan sesi berakhir saat jendela terakhir ditutup.
Tombol pintas tmux dan screen yang paling sering dipakai
| Tindakan | tmux | screen |
|---|---|---|
| Buat sesi bernama | tmux new -s nama | screen -S nama |
| Lepas sesi (detach) | Ctrl+b lalu d | Ctrl+a lalu d |
| Daftar sesi | tmux ls | screen -ls |
| Sambung lagi | tmux attach -t nama | screen -r nama |
| Jendela baru | Ctrl+b lalu c | Ctrl+a lalu c |
| Jendela berikutnya | Ctrl+b lalu n | Ctrl+a lalu n |
| Mode gulir | Ctrl+b lalu [ | Ctrl+a lalu [ |
| Matikan sesi dari luar | tmux kill-session -t nama | screen -S nama -X quit |
Kapan tmux atau screen bukan jawabannya?
Multiplexer cocok untuk pekerjaan sekali jalan yang kamu awasi: impor database, migrasi file dengan rsync, kompilasi, upgrade sistem, atau skrip perbaikan. Untuk aplikasi yang harus selalu hidup, seperti bot, API, atau worker antrean, sesi tmux bukan tempat yang tepat. Sesi itu hilang saat server reboot dan tidak ada yang menyalakan ulang aplikasi bila ia crash.
Aplikasi seperti itu sebaiknya dijalankan sebagai layanan systemd dengan Restart=on-failure, lalu lognya dibaca lewat journalctl. Untuk tugas yang berulang di jam tertentu, pakai cron job.
Ada juga nohup perintah & sebagai cara cepat agar proses tidak menerima sinyal hangup. Kekurangannya, kamu tidak bisa kembali ke tampilan interaktifnya, hanya membaca keluaran di file nohup.out. Untuk proses yang mungkin meminta input atau perlu dipantau, tmux dan screen tetap lebih nyaman.
Kebiasaan kecil yang menyelamatkan
Biasakan membuka tmux atau screen sebelum menjalankan perintah apa pun yang butuh lebih dari beberapa menit, terutama upgrade paket (apt full-upgrade atau dnf upgrade) yang bisa merusak sistem bila terhenti di tengah jalan. Beri nama sesi sesuai pekerjaannya agar tidak bingung saat ada beberapa sesi sekaligus. Dan sebelum menutup pekerjaan, jalankan tmux ls atau screen -ls untuk memastikan tidak ada sesi lama yang tertinggal dan memakan memori.
Bila server dipakai bersama beberapa admin, sepakati nama sesi yang menyebut pemiliknya, misalnya budi-migrasi, supaya tidak ada yang mematikan sesi orang lain karena mengira sesi itu sudah tidak terpakai.
Satu hal lagi: sesi tmux dan screen hidup di memori server. Kalau server direstart, semua sesi ikut hilang beserta proses di dalamnya. Jadi sebelum menjadwalkan reboot, cek dulu apakah masih ada pekerjaan yang berjalan di sesi yang terlepas. Perintah tmux ls atau screen -ls cukup untuk mengetahuinya dalam hitungan detik.
Singkatnya: jalankan proses panjang di dalam tmux atau screen, lepas dengan detach, sambung lagi dengan attach. Pilih tmux untuk server baru, tetap pakai screen bila sudah terbiasa, dan serahkan aplikasi yang harus hidup terus kepada systemd.


