ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home ใช้ tmux ให้คำสั่งทำงานต่อแม้ SSH หลุด

ใช้ tmux ให้คำสั่งทำงานต่อแม้ SSH หลุด

เวลารันคำสั่งที่ใช้เวลานานผ่าน SSH เช่น Import ไฟล์ SQL ขนาดหลาย GB, คัดลอกเว็บไซต์ไปอีกเครื่อง หรืออัปเกรดระบบ ถ้าอินเทอร์เน็ตสะดุดหรือปิดโน้ตบุ๊กกลางคัน การเชื่อมต่อ SSH จะหลุด และคำสั่งที่รันอยู่จะถูกหยุดไปด้วย ซึ่งบางครั้งทิ้งงานไว้ครึ่งทางจนต้องเริ่มใหม่หรือกู้ข้อมูล

tmux (Terminal Multiplexer) แก้ปัญหานี้โดยรัน Shell ไว้ใน Session บนเซิร์ฟเวอร์ แยกจากการเชื่อมต่อ SSH เมื่อ SSH หลุด Session ยังทำงานต่อ และคุณเข้ากลับมาดูหน้าจอเดิมได้ทุกเมื่อ นอกจากนี้ยังแบ่งหน้าจอเป็นหลายส่วนได้ เช่น รันงานด้านหนึ่งและดู Log อีกด้านหนึ่ง

สิ่งที่ต้องเตรียม

  • เซิร์ฟเวอร์ Ubuntu 22.04/24.04 หรือ AlmaLinux/Rocky Linux 8-9 ที่เข้าผ่าน SSH ได้
  • สิทธิ์ sudo สำหรับติดตั้งแพ็กเกจ (การใช้งาน tmux เองไม่ต้องใช้ sudo)

ขั้นตอนที่ 1: ติดตั้ง tmux

# Ubuntu
sudo apt update && sudo apt install tmux
# AlmaLinux / Rocky
sudo dnf install tmux

ตรวจเวอร์ชันด้วย tmux -V ควรเห็น tmux 3.x ใน Ubuntu Server หลาย Image มี tmux ติดตั้งมาแล้ว

ขั้นตอนที่ 2: สร้าง Session ที่มีชื่อ

tmux new -s import

หน้าจอจะดูเหมือนเดิม แต่มีแถบสถานะสีเขียวด้านล่างแสดงชื่อ Session [import] ตั้งชื่อตามงานเสมอ จะได้รู้ว่า Session ไหนทำอะไรเมื่อกลับมาภายหลัง จากนั้นรันงานตามปกติ เช่น

mysql -u root -p example_db < /home/admin/example_db.sql

ขั้นตอนการ Import ไฟล์ SQL ขนาดใหญ่ให้เร็วและปลอดภัย ดูเพิ่มเติมที่ นำเข้าไฟล์ SQL ขนาดใหญ่ผ่าน Command Line

ขั้นตอนที่ 3: Detach ออกจาก Session

คีย์ลัดของ tmux ขึ้นต้นด้วย Prefix คือ Ctrl+b วิธีกดคือกด Ctrl ค้างแล้วกด b ปล่อยทั้งสองปุ่ม แล้วจึงกดปุ่มคำสั่ง

กด Ctrl+b แล้วกด d เพื่อ Detach หน้าจอจะกลับสู่ Shell ปกติพร้อมข้อความ [detached (from session import)] ตอนนี้งานยังทำงานอยู่บนเซิร์ฟเวอร์ คุณออกจาก SSH หรือปิดเครื่องได้เลย ถ้า SSH หลุดเองระหว่างทาง ผลก็เหมือนการ Detach

ขั้นตอนที่ 4: กลับเข้า Session เดิม

SSH เข้าเซิร์ฟเวอร์อีกครั้งด้วยผู้ใช้เดิม แล้วดูรายการ Session

tmux ls
import: 1 windows (created Fri Sep 19 10:02:11 2026)
tmux attach -t import

คุณจะเห็นหน้าจอเดิมพร้อมผลลัพธ์ทั้งหมดที่เกิดขึ้นระหว่างที่ไม่ได้ดู ถ้ามีเพียง Session เดียว ใช้ tmux a สั้น ๆ ได้ เมื่องานเสร็จ พิมพ์ exit ใน Session เพื่อปิด หรือสั่งจากภายนอกด้วย tmux kill-session -t import

ขั้นตอนที่ 5: ใช้หลาย Window และแบ่ง Pane

Session หนึ่งมีได้หลาย Window (คล้ายแท็บ) และแต่ละ Window แบ่งเป็นหลาย Pane ได้ คีย์ลัดที่ใช้บ่อย (กด Ctrl+b ก่อนทุกครั้ง)

คีย์ผล
dDetach ออกจาก Session
cสร้าง Window ใหม่
n / pไป Window ถัดไป / ก่อนหน้า
0 ถึง 9ไป Window หมายเลขนั้น
,เปลี่ยนชื่อ Window
%แบ่ง Pane ซ้ายขวา
"แบ่ง Pane บนล่าง
ลูกศรย้ายไป Pane อื่น
zขยาย Pane ปัจจุบันเต็มจอ กดซ้ำเพื่อคืน
xปิด Pane ปัจจุบัน (ถามยืนยันก่อน)
[โหมดเลื่อนดูผลลัพธ์ย้อนหลัง ใช้ลูกศรหรือ PageUp กด q เพื่อออก
sแสดงรายการ Session ให้เลือกสลับ

ตัวอย่างการใช้จริง: ใน Session import กด Ctrl+b แล้ว " เพื่อแบ่งจอบนล่าง ด้านบนรันงาน ด้านล่างรัน top หรือ tail -f ดู Log ไปพร้อมกัน

ขั้นตอนที่ 6: ตั้งค่าที่ทำให้ใช้งานง่ายขึ้น

สร้างไฟล์ ~/.tmux.conf ในโฮมของผู้ใช้

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

mouse on ให้คลิกเลือก Pane ลากปรับขนาด และเลื่อน Scroll ด้วยเมาส์ได้ history-limit เพิ่มจำนวนบรรทัดที่เลื่อนดูย้อนหลังได้ ส่วน base-index 1 ให้เลข Window เริ่มที่ 1 ซึ่งตรงกับตำแหน่งปุ่มบนคีย์บอร์ด โหลดค่าใหม่เข้า Session ที่เปิดอยู่ด้วย

tmux source-file ~/.tmux.conf

เมื่อเปิด mouse แล้ว การลากเลือกข้อความจะเป็นของ tmux แทนโปรแกรม Terminal ถ้าต้องการคัดลอกข้อความไปวางบนเครื่องของคุณ ให้กด Shift ค้างขณะลากเลือก (บน macOS ใน iTerm2 ใช้ Option ส่วนใน Terminal ใช้ Fn)

งานที่ควรรันใน tmux เสมอ

  • Import หรือ Dump ฐานข้อมูลขนาดใหญ่
  • คัดลอกหรือซิงก์ไฟล์จำนวนมากด้วย rsync หรือ scp ดู โอนไฟล์ระหว่างเครื่องด้วย scp และ sftp
  • อัปเกรดแพ็กเกจจำนวนมาก หรือคำสั่งที่ใช้เวลาเกินไม่กี่นาที (สำหรับ do-release-upgrade ตัวโปรแกรมจะเปิด screen สำรองให้เองอยู่แล้ว ดู อัปเกรด Ubuntu เป็น LTS รุ่นใหม่)
  • การแก้ไข Firewall หรือเครือข่ายที่อาจทำให้การเชื่อมต่อสะดุด เพื่อให้คำสั่งทำงานจนจบแม้ SSH หลุด แต่ต้องเปิด Session SSH ที่สองทดสอบก่อนปิดหน้าต่างเดิมเสมอ

ตรวจสอบผลลัพธ์

  1. สร้าง Session ทดสอบด้วย tmux new -s test
  2. รัน for i in $(seq 1 300); do date; sleep 1; done ซึ่งพิมพ์เวลาทุกวินาทีเป็นเวลา 5 นาที
  3. ปิดหน้าต่าง SSH ทันทีโดยไม่ Detach
  4. รอประมาณ 1 นาที แล้ว SSH เข้าใหม่และรัน tmux attach -t test
  5. ถ้าเห็นเวลาพิมพ์ต่อเนื่องไม่ขาดช่วงระหว่างที่หลุด แปลว่า tmux ทำงานถูกต้อง กด Ctrl+C แล้ว exit เพื่อปิด

ปัญหาที่พบบ่อย

tmux ls แสดง no server running

ไม่มี Session ของผู้ใช้นี้ Session ของ tmux แยกตามผู้ใช้ ถ้าตอนสร้างใช้ sudo -i เป็น root ก่อน ต้องเป็น root ก่อนเช่นกันจึงจะเห็น นอกจากนี้ Session จะหายเมื่อเครื่องรีบูต เพราะอยู่ในหน่วยความจำ

sessions should be nested with care

คุณกำลังพยายามเปิด tmux ซ้อนใน tmux ให้ Detach ออกก่อน แล้วจึง attach Session ที่ต้องการ หรือสลับ Session จากภายในด้วย Ctrl+b แล้ว s

หน้าจอเล็กผิดปกติหรือมีจุดเต็มขอบจอ

มี Client อื่นที่ Attach Session เดียวกันอยู่ด้วยหน้าจอขนาดเล็กกว่า เช่น หน้าต่างเก่าที่ยังไม่หลุด ให้ attach ด้วย tmux attach -d -t ชื่อ เพื่อตัด Client อื่นออก

ไม่มี tmux และติดตั้งไม่ได้

ใช้ screen แทนได้ (screen -S ชื่อ, Detach ด้วย Ctrl+a แล้ว d, กลับด้วย screen -r ชื่อ) หรือกรณีงานที่ไม่ต้องดูหน้าจอ ใช้ nohup คำสั่ง > output.log 2>&1 & ซึ่งรันงานต่อแม้ SSH หลุด และเก็บผลลัพธ์ลงไฟล์ สำหรับงานที่ต้องรันตามเวลาเป็นประจำ ให้ใช้ Cronjob หรือ systemd แทน ดู จัดการ Service บน Linux ด้วย systemctl

หากทำตามขั้นตอนแล้วยังติดปัญหา สามารถติดต่อทีมงาน THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/ โดยแจ้งชื่อเซิร์ฟเวอร์ ระบบปฏิบัติการ คำสั่งที่ใช้ และข้อความ Error ที่พบ เพื่อให้ตรวจสอบได้รวดเร็วขึ้น

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security