Apakah ada cara untuk menyimpan sesi tmux? Dengan kata lain, jika saya me-reboot komputer, apakah saya akan selalu kehilangan sesi?
*** System restart required ***
Apakah ada cara untuk menyimpan sesi tmux? Dengan kata lain, jika saya me-reboot komputer, apakah saya akan selalu kehilangan sesi?
*** System restart required ***
Jawaban:
Ya, jika Anda me-reboot komputer Anda, Anda akan kehilangan sesi. Sesi tidak dapat disimpan. Tapi, mereka bisa dituliskan. Yang paling banyak dilakukan sebenarnya adalah membuat skrip beberapa sesi sehingga Anda dapat membuatnya kembali. Misalnya, berikut ini skrip shell sepele untuk membuat sesi:
#!/bin/zsh
SESSIONNAME="script"
tmux has-session -t $SESSIONNAME &> /dev/null
if [ $? != 0 ]
then
tmux new-session -s $SESSIONNAME -n script -d
tmux send-keys -t $SESSIONNAME "~/bin/script" C-m
fi
tmux attach -t $SESSIONNAME
Inilah yang dilakukannya. Pertama, ia memeriksa apakah sudah ada sesi dengan nama itu (dalam hal ini, nama asli adalah "skrip") dengan tmux memiliki sesi . Itu memeriksa kode kembali. Jika sudah ada sesi yang sedang berlangsung dengan nama itu, ia akan melewatkan siklus "jika" dan langsung ke baris terakhir, di mana ia melekat pada sesi. Kalau tidak, itu membuat sesi dan mengirim beberapa kunci untuk itu (hanya menjalankan skrip acak untuk saat ini). Kemudian keluar dari blok "jika" dan menempel.
Ini adalah sampel yang sangat sepele. Anda dapat membuat banyak jendela, panel, dan sejenisnya sebelum Anda lampirkan.
Ini tidak akan menjadi hal yang sama seperti yang Anda minta. Jika Anda melakukan perubahan pada sesi, misalnya Anda mengubah nama jendela dan membuat panel baru di dalamnya, jika Anda me-reboot perubahan itu tentu saja tidak akan disimpan.
Ada beberapa alat yang memudahkan proses sesi scripting, meskipun saya lebih suka melakukan hal-hal secara manual (saya pikir ini lebih fleksibel). Alat-alat itu adalah Tmuxinator dan Teamocil .
Sumber informasi utama saya adalah buku "The Pragmatic Bookshelf" Tmux.
tmux send-keys ...
garis itu?
some command; if [ $? != 0 ]; then .....
lebih mudah untuk menulis (dan membaca) sebagai: if ! some command; then .....
.
Saya menulis skrip bash sederhana yang tetap ada pada sesi tmux terbuka, jendela dan direktori kerja saat ini di masing-masing.
Sebut seperti secara manual atau berkala dari cron (karena Anda mungkin lupa):
tmux-session save
Itu akan menulis ke ~/.tmux-session
. Kembalikan setelah reboot seperti:
tmux-session restore
Saya menemukan ini jauh lebih baik daripada beberapa ratus skrip Perl panjang.
Saya menulis plugin tmux yang memungkinkan Anda untuk menyimpan lingkungan tmux lengkap dan mengembalikannya nanti. Berusaha untuk benar-benar rinci sehingga Anda memiliki perasaan Anda tidak pernah berhenti tmux.
https://github.com/tmux-plugins/tmux-resurrect
Pembaruan: sekarang ada plugin tmux-continuum yang melakukan penyelamatan latar belakang otomatis dari lingkungan tmux. Secara opsional ini juga * secara otomatis * mengembalikan tmux env setelah komputer dinyalakan kembali.
tmuxinator adalah alat yang ditulis dalam Ruby, yang dapat digunakan untuk membuat dan mengelola sesi tmux dengan mudah. Ini dapat digunakan untuk membuat proyek, yang nantinya bisa dipakai sebagai sesi tmux.
Pertimbangkan solusi parsial yang ditemukan di sini
Penulis membuat fungsi yang menyimpan sejarah sesi tmux untuk mempertahankan status sesi tmux setelah server reboot.
Saya berhasil menggunakan https://github.com/jimeh/tmuxifier untuk membuat ulang sesi. Ini dapat diinstal tanpa ruby, hanya menggunakan git.
Sampel cukup jelas, misalnya: https://github.com/jimeh/tmuxifier/blob/master/examples/example.session.sh