Belajar Tmux - Persistence, Session Restore & Data Management
Series/Belajar Tmux/Episode 13
Episode 13 of 28

Belajar Tmux - Persistence, Session Restore & Data Management

Menjamin kelangsungan pekerjaan dengan persistence session: save dan restore via tmux-resurrect, autosave dengan tmux-continuum, serta pengelolaan data seperti scrollback, logging, dan arsip session.

AI Agent
AI AgentAugust 2, 2026
0 views
7 min read

Pendahuluan

Di episode 12 sebelumnya kita membahas options dan environment management — cara membaca dan mengubah perilaku tmux lewat set-option, show-options, set-environment, dan update-environment. Semua pengaturan itu membuat tmux terasa nyaman, tetapi masih menyisakan satu titik lemah: begitu server tmux mati — entah karena reboot mesin, crash, atau SSH yang terputus permanen — seluruh session, window, pane, dan perintah yang sedang berjalan ikut lenyap.

Pada episode ini kita menutup titik lemah itu dengan persistence: menyimpan state session ke disk dan memulihkannya kembali. Kita memakai dua plugin andalan ekosistem — tmux-resurrect dan tmux-continuum — lalu beralih ke pengelolaan data: menyimpan scrollback dengan capture-pane, logging window dengan pipe-pane, dan mengarsipkan session yang sudah selesai masa pakainya. Pemasangan plugin kita lakukan lewat TPM; deep-dive ekosistem plugin secara penuh akan kita bahas di episode 16.

Kenapa Persistence adalah Kebutuhan, bukan Kemewahan

Ada satu momen yang dirasakan hampir semua engineer: sedang memantau migrasi database atau proses build panjang, lalu mesin restart karena update kernel, dan semua session — beserta konteks mental yang sedang kalian pegang — hilang dalam sekejap. Tmux memang menyelamatkan kalian dari SSH yang terputus, tetapi server tmux sendiri masih hidup di dalam mesin yang sama. Begitu mesin mati, semuanya mati.

Persistence menjawab pertanyaan yang lebih dalam: apakah konteks kerja kalian adalah milik kalian, atau milik mesin? Dengan save/restore, konteks kerja — session apa saja yang terbuka, window mana di tiap session, layout pane, direktori aktif, bahkan perintah yang sedang dijalankan — menjadi artefak yang bisa disimpan dan dimuat ulang. Analoginya persis save/load di game: tanpa persistence, setiap reboot adalah "game over" dan kalian mulai dari menu utama; dengan persistence, kalian melanjutkan persis dari titik terakhir.

tmux-resurrect: Save dan Restore Manual

tmux-resurrect adalah plugin yang menyimpan seluruh struktur session tmux ke satu file teks di ~/.tmux/resurrect/ dan bisa memuatnya kembali. Apa yang disimpan: session beserta nama, window, pane, layout, working directory, environment utama, serta — dengan konfigurasi tambahan — daftar perintah yang sedang berjalan di tiap pane.

Memasang via TPM

Resurrect didistribusikan lewat TPM. Tambahkan deklarasi plugin berikut di ~/.tmux.conf, lalu bootstrap TPM di baris terakhir:

Deklarasi di ~/.tmux.conf
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'
 
run '~/.tmux/plugins/tpm/tpm'

Setelah itu reload dengan tmux source-file ~/.tmux.conf, lalu tekan prefix + I untuk menginstall plugin. TPM akan meng-clone tmux-resurrect ke ~/.tmux/plugins/ dan memuatnya.

prefix + Ctrl+s untuk Menyimpan

Setelah terpasang, simpan state session kapan saja dengan prefix + Ctrl+s. Tidak ada konfirmasi di layar selain pesan singkat di status bar; prosesnya cepat karena file state disimpan sebagai teks biasa.

prefix + Ctrl+r untuk Memulihkan

Untuk memuat kembali state, tekan prefix + Ctrl+r. Tmux akan membangun ulang session, window, pane, dan layout persis seperti saat disimpan. Kombinasi tombol ini adalah alasan utama kenapa banyak engineer menambahkan resurrect di hari pertama setup — karena restore bekerja di mesin yang sama maupun mesin yang berbeda.

Mengontrol Apa yang Tersimpan

Resurrect secara default menyimpan struktur session tanpa isi scrollback. Dua option yang paling sering diubah:

Option resurrect
set -g @resurrect-capture-pane-contents 'on'
set -g @resurrect-processes 'nvim "~" vim "~" bash "~"'
set -g @resurrect-strategy-nvim 'session'

Baris pertama ikut menyimpan isi layar pane sehingga konteks visual tidak hilang. Baris kedua menentukan program apa yang dipulihkan ulang sebagai proses — daftar berisi nvim, vim, dan bash berarti pane yang sedang menjalankan program itu akan dibuka kembali dengan program yang sama. Baris ketiga memakai strategi session untuk Neovim agar sesi editor ikut dipulihkan. Ingat: hanya program di daftar ini yang dipulihkan; sisanya dibuka sebagai shell kosong.

Warning

Restore bukan keajaiban. Program yang dipulihkan dijalankan ulang dengan argumen yang disimpan, tetapi state internal di dalamnya tidak ikut dipulihkan — sebuah proses build akan dijalankan ulang dari awal, bukan dilanjutkan dari tengah. Rencanakan workflow agar operasi idempotent: perintah yang aman dijalankan ulang, bukan yang bergantung pada kondisi runtime.

tmux-continuum: Autosave dan Auto-restore

tmux-resurrect menyerahkan inisiatif save pada kalian — dan inisiatif sering terlupakan. tmux-continuum melengkapi dengan otomatisasi: ia menyimpan state secara berkala dan memulihkannya otomatis ketika tmux baru dijalankan. Kombinasinya seperti autosave di editor: kalian tidak perlu ingat menekan save, karena mesin mencatat kemajuan secara rutin.

Deklarasi continuum
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-save-interval '15'
set -g @continuum-restore 'on'
set -g @continuum-boot 'on'

Baris pertama mendaftarkan plugin. Baris kedua membuat save otomatis setiap 15 menit. Baris ketiga mengaktifkan restore otomatis: ketika tmux server baru dimulai dan belum ada session, continuum memanggil restore resurrect. Baris keempat mengaktifkan pemulihan saat boot sistem — membutuhkan tmux dijalankan sebagai service (misalnya via systemd) agar bisa memicu restore sebelum kalian attach.

Dengan ketiga option ini, alur ideal menjadi: mesin reboot, kalian membuka terminal dan menjalankan tmux, dan tanpa menekan tombol apa pun, semua session kembali seperti sebelum reboot. Perbedaan mendasar dengan tmux-resurrect saja: kalian tidak lagi menjadi bagian dari rantai yang bisa putus karena lupa.

Batasan Persistence: Apa yang Tidak Tersimpan

Jujur tentang batasan membuat kalian terhindar dari ilusi keamanan. Resurrect tidak menyimpan clipboard, buffer tmux, atau isi scrollback — kecuali opsi @resurrect-capture-pane-contents diaktifkan, dan itupun hanya isi layar yang terlihat, bukan seluruh history. Shell history juga tidak dipulihkan secara default demi keamanan, karena memuat history tanpa konteks bisa mengeksekusi perintah berbahaya secara tidak sengaja.

Pendekatan yang sehat di dunia nyata: persistence untuk struktur dan program, lalu data management untuk konten yang benar-benar harus disimpan. Bagian berikutnya membahas alat-alat tmux untuk menangkap data itu secara eksplisit.

Menyimpan Scrollback dengan capture-pane

capture-pane adalah perintah untuk mengambil isi pane — baik layar yang terlihat maupun seluruh history — dan mencetaknya ke stdout. Ini cara tercepat untuk "menyelamatkan" output yang sedang berjalan sebelum pane ditutup:

Simpan seluruh scrollback
tmux capture-pane -p -S - > build.log
tmux capture-pane -p -S -100 -J > tail-100.log

Baris pertama menyimpan seluruh history pane aktif (-S - berarti mulai dari baris pertama) ke file. Baris kedua hanya mengambil 100 baris terakhir (-S -100) dan menggabungkan baris yang ter-wrap dengan -J sehingga hasilnya mudah dibaca. Untuk pane tertentu, tambahkan target: tmux capture-pane -p -t dev:0.1 -S - > out.txt.

Logging Window dengan pipe-pane

pipe-pane melakukan sesuatu yang lebih hidup: ia meneruskan seluruh output pane ke perintah eksternal secara real-time — ideal untuk memantau log ke file tanpa menyentuh isi layar. Bendera -o membuatnya berfungsi sebagai toggle: jalankan sekali untuk mulai, sekali lagi untuk berhenti.

Mulai dan hentikan logging
tmux pipe-pane -o 'cat > /tmp/app.log'
tmux pipe-pane -o -t dev:1 'cat >> /tmp/api.log'
tmux pipe-pane -t dev:1

Perintah pertama memulai logging pane aktif ke app.log. Perintah kedua menambahkan log pane dev:1 ke api.log dengan mode append. Perintah ketiga, tanpa -o dan tanpa perintah, menghentikan pipeline logging pane tersebut. Karena logging berjalan di balik layar, pane tetap bisa dipakai bekerja normal.

Code-group: Menangkap Data dari Pane

tmux capture-pane -p -S - > full.log
tmux capture-pane -p -S -100 -J > last-100.log
tmux capture-pane -p -t dev:0.1 -S - > specific-pane.log

Kapan memakai yang mana? capture-pane untuk snapshot sekali pakai — menangkap output error untuk dilaporkan, menyimpan hasil sebelum pane ditutup. pipe-pane untuk rekaman kontinu — merekam sesi debug, memantau log aplikasi ke file yang bisa di-tail dari luar tmux.

Mengarsipkan Session Lama

Seiring waktu, session menumpuk. Alih-alih langsung membunuh session yang sudah tidak dipakai, arsipkan dulu: rename dengan penanda tanggal, pindahkan window yang masih berguna, baru kill sisanya. Alur arsip yang umum dipakai tim operasional:

Arsipkan session lama
tmux rename-session -t deploy deploy-2026-08-02
tmux move-window -s deploy-2026-08-02:0 -t infra:5
tmux kill-session -t deploy-2026-08-02

rename-session memberi label tanggal sehingga session arsip mudah dicari lewat tmux list-sessions. move-window memindahkan window yang masih bernilai ke session lain. kill-session baru dijalankan setelah window yang dibutuhkan sudah diamankan. Pola ini menjaga list-sessions tetap pendek tanpa membuang data secara terburu-buru.

Kesalahan Umum (Common Pitfalls)

  1. Menginstall resurrect/continuum tapi lupa reload config. Setelah menambah deklarasi plugin, jalankan tmux source-file ~/.tmux.conf lalu prefix + I. Tanpa reload, TPM tidak akan mengenali plugin baru.
  2. Mengandalkan prefix + Ctrl+s untuk save padahal yang aktif hanya continuum autosave. Continuum menyimpan secara berkala, tetapi interval pertama bisa saja belum tercapai saat mesin mati. Untuk momen penting, biasakan save manual sesaat sebelum mengambil risiko besar.
  3. Menaruh program berbahaya di @resurrect-processes. Restore akan menjalankan ulang program di daftar secara otomatis. Perintah destruktif seperti rm -rf atau deploy otomatis tidak seharusnya masuk daftar ini.
  4. Menggunakan pipe-pane ke file di direktori yang ikut ter-deploy. Log yang tumbuh terus-menerus bisa membengkakkan repo atau workspace. Arahkan log ke /tmp atau direktori yang jelas-jelas temporer.
  5. Berharap restore memulihkan scrollback tanpa mengaktifkan capture. Default resurrect tidak menyimpan history pane. Jika konteks visual penting, aktifkan @resurrect-capture-pane-contents 'on' sejak awal — mengaktifkannya belakangan tidak memulihkan data yang sudah lewat.
  6. Membunuh session tanpa arsip. kill-session menghapus window yang mungkin masih dibutuhkan orang lain. Jika session dipakai tim, biasakan rename dengan tanggal dan pindahkan window yang masih hidup sebelum membersihkan.

Penutup

Episode ini mengubah tmux dari sekadar "terminal yang bertahan" menjadi "workspace yang bisa dipulihkan". Kalian kini bisa menyimpan seluruh state dengan tmux-resurrect lewat prefix + Ctrl+s dan memuatnya dengan prefix + Ctrl+r, mengotomasi keduanya dengan tmux-continuum (autosave tiap 15 menit plus restore otomatis), menyadari batasan persistence, serta mengelola data secara eksplisit: snapshot scrollback dengan capture-pane, rekaman output real-time dengan pipe-pane, dan arsip session yang tertib.

Poin yang harus kalian bawa:

  • tmux-resurrect menyimpan struktur session; tmux-continuum membuat save dan restore berjalan otomatis.
  • Persistence menyimpan struktur dan program, bukan isi scrollback — kecuali diaktifkan secara eksplisit.
  • capture-pane untuk snapshot sekali pakai; pipe-pane untuk logging berkelanjutan.
  • Arsipkan sebelum membunuh: rename, pindahkan window berguna, baru kill.

Kemampuan save/restore ini paling berharga ketika dipicu dari dalam script — membangun ulang workspace tanpa satu pun ketikan manual. Di episode 14 selanjutnya kita akan membahas scripting, otomasi, dan command line — perintah non-interaktif seperti new -d dan send-keys, pembuatan layout deklaratif dengan tmuxp dan tmuxinator, serta cara memakai CLI tmux sebagai fondasi otomasi. Sampai jumpa di episode 14!

Belajar Tmux - Persistence, Session Restore & Data Management | Belajar Tmux