SSD Nodes Learn 🎉 VPS เริ่ม $5.50/เดือน
คู่มือ Matt Connorโดย Matt Connor · อัปเดตเมื่อ 2026-08-13

วิธีใช้งานคำสั่ง watch ใน Linux ให้มีประสิทธิภาพ

เรียนรู้วิธีใช้คำสั่ง watch เพื่อรันคำสั่งซ้ำตามช่วงเวลาที่กำหนด พร้อมเทคนิคการตั้งค่า interval การไฮไลต์ผลลัพธ์ที่เปลี่ยนไป และการจัดการกับ pipe อย่างถูกต้องใน terminal

การทำงานของคำสั่ง watch

คำสั่ง watch จะรันคำสั่งอื่นซ้ำตามช่วงเวลาที่กำหนดและวาดผลลัพธ์ใหม่ในตำแหน่งเดิมบนหน้าจอ โดยค่าเริ่มต้นของช่วงเวลาคือ 2 วินาที ให้ใช้คำสั่งนี้เมื่อคุณกำลังรอให้ตัวเลขมีการเปลี่ยนแปลง เช่น พื้นที่ดิสก์ที่กำลังเต็ม, สถานะของ container ที่กำลังนิ่ง, การต่ออายุ certificate ที่กำลังดำเนินการ หรือคิวงานที่กำลังลดลง

watch มาจากชุดเครื่องมือ procps-ng และถูกติดตั้งมาพร้อมกับ Ubuntu หรือ Debian VPS รุ่นใหม่ในฐานะส่วนหนึ่งของแพ็กเกจ procps โปรดตรวจสอบเวอร์ชันของคุณก่อนที่จะเชื่อถือ flag ใดๆ ด้านล่างนี้ เนื่องจากตัวเลือกที่มีประโยชน์สองรายการเพิ่งถูกเพิ่มเข้ามาในเวอร์ชันหลังๆ

watch --version

บน Ubuntu 24.04 คำสั่งดังกล่าวจะแสดงบรรทัดข้อความคล้ายกับ watch from procps-ng 4.0.4 ต่อไปนี้คือตัวอย่างการใช้งานที่ง่ายและมีประโยชน์ที่สุด

watch df -h /

หน้าจอจะถูกล้างและแสดงบรรทัดหัวข้อ, บรรทัดว่าง, จากนั้นจึงแสดงผลลัพธ์ของ df -h /:

Every 2.0s: df -h /                          server1: Sun Aug  9 10:21:44 2026

ทางด้านซ้ายคือช่วงเวลาและคำสั่งที่ watch กำลังรันอยู่ ทางด้านขวาคือชื่อโฮสต์และเวลาปัจจุบัน นาฬิกาเป็นส่วนที่มีประโยชน์เพราะช่วยยืนยันว่าหน้าจอยังคงรีเฟรชอยู่แม้ตัวเลขด้านล่างจะไม่มีการเปลี่ยนแปลง กด Ctrl+C เพื่อออกจากโปรแกรม

watch จะวาดเฟรมหนึ่งเฟรมให้พอดีกับหน้าจอ terminal บรรทัดที่ยาวจะถูกตัดขึ้นบรรทัดใหม่ แต่ -w จะตัดข้อความทิ้งแทน และข้อมูลใดๆ ที่อยู่เกินแถวล่างสุดจะไม่ถูกแสดงผลเลย ภายในเฟรมจะไม่มีการเลื่อนดูประวัติ (scrollback) เนื่องจากทุกรอบการทำงานจะเขียนทับข้อมูลเดิมเสมอ ข้อเท็จจริงเพียงข้อเดียวนี้เป็นตัวกำหนดว่า watch เหมาะสมกับการใช้งานในลักษณะใดมากที่สุด

ควรให้ watch รันคำสั่งซ้ำบ่อยแค่ไหน?

สองวินาทีเป็นเพียงค่าเริ่มต้นเท่านั้น ให้เลือกช่วงเวลาตามความเร็วในการเปลี่ยนแปลงของค่าและทรัพยากรที่ใช้ในการรันแต่ละครั้ง

  • -n 0.5 สำหรับตัวนับที่มีการเปลี่ยนแปลงตลอดเวลา เช่น ss -s หรือจำนวนไบต์ของอินเทอร์เฟซ ช่วงเวลาที่สั้นที่สุดที่ watch ยอมรับคือ 0.1 วินาที
  • -n 30 หรือ -n 60 สำหรับดิสก์และใบรับรอง ระบบไฟล์ที่เต็มภายในหนึ่งวันไม่จำเป็นต้องอัปเดตถึงสามสิบครั้งต่อนาที

watch จะรันคำสั่ง รอจนกว่าคำสั่งจะทำงานเสร็จสิ้น แล้วจึงเริ่มนับเวลาพักตามช่วงเวลาที่กำหนด ระยะเวลาที่ใช้ในการรันจะถูกบวกเพิ่มเข้าไปในช่องว่างระหว่างรอบ ดังนั้นคำสั่งที่ใช้เวลาแปดวินาทีภายใต้ -n 2 จะทำให้คุณได้ข้อมูลใหม่ทุกๆ สิบวินาทีและทำให้เครื่องทำงานหนักตลอดเวลา ให้เพิ่ม -p (--precise) เพื่อให้ watch พยายามเริ่มรันคำสั่งตามช่วงเวลาที่กำหนดไว้แทน โดยวัดจากจุดเริ่มต้นของรอบหนึ่งไปยังจุดเริ่มต้นของรอบถัดไป

หากคุณต้องการค่าเริ่มต้นอื่นเสมอ ให้ export WATCH_INTERVAL ไว้ใน shell profile ของคุณ โดยที่การระบุ -n โดยตรงจะยังคงมีความสำคัญเหนือกว่าค่าเริ่มต้นนี้ ให้รัน watch --help เพื่อยืนยันว่า build ของคุณอ่านค่าตัวแปรดังกล่าวแล้ว

เน้นการเปลี่ยนแปลงด้วย -d

การอ่านข้อความที่เหมือนกันทั้งหน้าเพื่อหาฟิลด์ที่เปลี่ยนไปนั้นเป็นงานที่ยากลำบาก -d (--differences) จะช่วยคุณจัดการเรื่องนี้

watch -n 30 -d 'df -h / /var'

อักขระที่แตกต่างจากเฟรมก่อนหน้าจะแสดงด้วยสีพื้นหลังสลับกับตัวอักษร (reverse video) ทำให้เซลล์ Use% สว่างขึ้นทันทีที่มีการเปลี่ยนแปลงในขณะที่ส่วนอื่นยังคงนิ่งอยู่ หาก /var ไม่ได้แยกเป็นระบบไฟล์ต่างหาก คุณจะเห็นระบบไฟล์ root ปรากฏขึ้นสองครั้ง ซึ่งเป็นวิธีที่รวดเร็วในการเรียนรู้ว่าเครื่องถูกแบ่งพาร์ติชันไว้อย่างไร

การเปรียบเทียบนี้เป็นการเปรียบเทียบตามตำแหน่ง ซึ่งหมายความว่า watch จะนำเฟรมใหม่มาวางเทียบกับเฟรมเก่าแบบอักขระต่ออักขระ ผลลัพธ์ที่มีความกว้างของคอลัมน์เปลี่ยนแปลงจะสว่างขึ้นเกือบทั้งหมด ดังนั้นควรเลือกใช้คำสั่งที่มีรูปแบบการแสดงผลคงที่ procps-ng เวอร์ชันปัจจุบันยังรองรับ watch --differences=permanent ซึ่งจะคงการเน้นทุกตำแหน่งที่มีการเปลี่ยนแปลงไว้แทนที่จะเน้นเฉพาะการเปลี่ยนแปลงล่าสุดเท่านั้น โปรดตรวจสอบด้วย watch --help ก่อนที่คุณจะใช้งานจริง

ฉันจะทำให้ watch หยุดทำงานเมื่อผลลัพธ์มีการเปลี่ยนแปลงได้อย่างไร?

-g (--chgexit) จะหยุดการทำงานของ watch ทันทีที่ผลลัพธ์แตกต่างไปจากการรันครั้งก่อนหน้า เมื่อ prompt ของคุณปรากฏขึ้นมาอีกครั้ง คุณจึงสามารถใส่คำสั่งอื่นต่อท้ายในบรรทัดเดียวกันได้

watch -n 10 -g 'systemctl is-active myapp' ; echo 'state changed'

นี่คือ flag ที่เปลี่ยนให้ watch กลายเป็นเครื่องมือสำหรับ "แจ้งเตือนเมื่อการ deploy เสร็จสิ้น" โดยมีข้อควรระวังหนึ่งประการที่มักทำให้ผู้ใช้พลาดเสมอ คือการเปรียบเทียบจะครอบคลุมผลลัพธ์ทั้งหมด ดังนั้นหากมีนาฬิกาหรือ PID (process identifier) ปรากฏอยู่ ค่าเหล่านี้จะเปลี่ยนไปในการรีเฟรชครั้งแรกทันทีและทำให้ watch หยุดทำงานในทันที systemctl status myapp จะแสดงเวลาที่ผ่านไปและการใช้หน่วยความจำ ดังนั้นการใช้ -g กับคำสั่งนี้จึงไม่มีประโยชน์ ให้ลดทอนคำสั่งให้เหลือเพียงข้อมูลที่คงที่ซึ่งคุณกำลังรอคอยอยู่ ซึ่งเป็นสิ่งที่ systemctl is-active ช่วยคุณได้

procps-ng เวอร์ชันใหม่ได้เพิ่มการทดสอบในทางตรงกันข้ามคือ --equexit <cycles> ซึ่งจะหยุดทำงานหลังจากผลลัพธ์ไม่มีการเปลี่ยนแปลงตามจำนวนรอบที่กำหนดไว้ มันตอบโจทย์คำถามที่ว่า "แจ้งเตือนฉันเมื่อสิ่งนี้เงียบลงแล้ว" โปรดตรวจสอบ watch --help เนื่องจาก build เวอร์ชันเก่าอาจไม่มีฟังก์ชันนี้

เหตุใด watch จึงไม่สนใจ pipe และ glob ของฉัน

นี่คือความผิดพลาดที่ทุกคนต้องเจอ และสาเหตุมาจาก shell ของคุณไม่ใช่ตัว watch เอง

watch docker compose ps | grep web

shell แบบโต้ตอบของคุณจะอ่านคำสั่งทั้งบรรทัดก่อนเริ่มทำงาน และจะแยกบรรทัดนั้นที่ตำแหน่ง pipe มันจะเริ่มทำงาน watch docker compose ps และเชื่อมต่อ เอาต์พุตหน้าจอของ watch เอง เข้ากับ grep ทำให้ watch ไม่ได้เขียนข้อมูลลง terminal อีกต่อไป ผลลัพธ์ที่แสดงจึงเสียหายหรือว่างเปล่า และ grep จะทำหน้าที่กรองเอาต์พุตการวาดหน้าจอแทนที่จะกรองรายการ container

ให้ใส่เครื่องหมายคำพูดครอบ pipeline ทั้งหมดเพื่อให้มันถูกส่งไปเป็นอาร์กิวเมนต์เดียว

watch 'docker compose ps | grep web'

watch จะส่งสตริงนั้นไปยัง sh -c และ shell นั้นจะรัน pipeline หนึ่งครั้งในทุกรอบการทำงาน ส่วน glob ก็ใช้กฎเดียวกันแต่มีอาการที่เงียบกว่า

watch ls -l /var/log/*.log
watch 'ls -l /var/log/*.log'

บรรทัดแรกจะขยาย glob เพียงครั้งเดียวใน shell ของคุณ ณ ขณะที่คุณกด Enter จากนั้น watch จะรันรายการชื่อไฟล์ที่ถูกแช่แข็งไว้ ทำให้ไฟล์ log ที่สร้างขึ้นในอีกหนึ่งนาทีต่อมาไม่ปรากฏขึ้น บรรทัดที่สองส่ง glob ให้ watch ซึ่งจะขยายค่าภายใน sh ในทุกรอบการทำงาน ทำให้ไฟล์ใหม่ปรากฏขึ้นมาเอง

เครื่องหมายคำพูดเป็นตัวกำหนดว่าตัวแปรหรือ command substitution จะถูกประมวลผลเมื่อใด watch "echo $(date)" จะรัน date เพียงครั้งเดียวใน shell ของคุณ จากนั้นจะแสดงสตริงที่คงที่นั้นตลอดไป ส่วน watch 'echo $(date)' จะรัน date ในทุกรอบการทำงาน เครื่องหมายคำพูดเดี่ยวหมายถึงการประมวลผลในภายหลัง เครื่องหมายคำพูดคู่หมายถึงการประมวลผลทันที

ผลกระทบอีกสองประการของ sh -c มีดังนี้:

  • Alias และ shell function จะไม่มีอยู่ภายในนั้น watch ll จะล้มเหลวด้วย sh: 1: ll: not found เพราะ sh -c ไม่เคยอ่านไฟล์ .bashrc ของคุณ ให้เขียนคำสั่งจริงออกมา หรือระบุ path เต็มของ binary ที่มีอยู่เฉพาะใน PATH แบบโต้ตอบของคุณเท่านั้น
  • Standard error เป็นสิ่งที่ควรค่าแก่การบันทึก ให้ใส่ 2>&1 ไว้ภายในเครื่องหมายคำพูดเมื่อคุณต้องการให้ข้อความแสดงข้อผิดพลาดปรากฏอยู่ในเฟรมแทนที่จะกระจัดกระจายอยู่ทั่วไป

เมื่อการใช้เครื่องหมายคำพูดกลายเป็นเรื่องยุ่งยาก -x (--exec) จะรันคำสั่งโดยตรงแทนที่จะผ่าน sh -c อาร์กิวเมนต์ที่มีช่องว่างจะจัดการได้ง่ายขึ้น แต่ pipe และ glob จะหยุดทำงานโดยสิ้นเชิงเพราะไม่มี shell คอยตีความคำสั่งเหล่านั้นอีกต่อไป

สิทธิ์การใช้งานเป็นไปตามตรรกะเดียวกัน เนื่องจาก watch เป็นกระบวนการปกติ watch 'sudo ss -tulpn' จะพบกับพรอมต์รหัสผ่านที่คุณไม่สามารถมองเห็นหรือพิมพ์ตอบได้ ให้รัน sudo watch 'ss -tulpn' แทน และจำไว้ว่าลูปทั้งหมดจะทำงานในฐานะ root จนกว่าคุณจะกด Ctrl+C

สี่สิ่งที่ควรเฝ้าระวังบน VPS

ดิสก์ที่กำลังเต็ม

watch -n 30 -d 'df -h / /var'

df ร้องขอข้อมูลจาก kernel ซึ่งเป็นข้อมูลที่มีอยู่แล้ว จึงเป็นคำสั่งที่ใช้ทรัพยากรน้อยและสามารถรันซ้ำได้ตลอดเวลา แต่ du -sh /var/log ไม่เป็นเช่นนั้น เพราะมันต้องไล่ตรวจสอบไฟล์ทุกไฟล์ในโครงสร้างไดเรกทอรีทุกรอบที่รัน การใช้ watch สั่งให้มันอ่านดิสก์อย่างต่อเนื่องจะทำให้เครื่องที่คุณกำลังวินิจฉัยทำงานช้าลง ให้รัน du เพียงครั้งเดียว หรือใช้ ncdu แทน จากนั้นจึงใช้ df ร่วมกับ watch เพื่อดูว่าตัวเลขยังคงเพิ่มขึ้นอยู่หรือไม่

คอนเทนเนอร์ที่รีสตาร์ทตัวเองอยู่ตลอด

cd /srv/myapp
watch -n 5 -d 'docker compose ps'

คอลัมน์สถานะจะแสดงระยะเวลาที่คอนเทนเนอร์แต่ละตัวทำงานอยู่ คอนเทนเนอร์ที่ติดอยู่ใน crash loop จะรีเซ็ตสถานะเป็น "Up 2 seconds" อยู่เรื่อยๆ และ -d จะทำให้เห็นความผิดปกตินี้ได้ทันที ให้เปลี่ยนไดเรกทอรีไปที่โปรเจกต์ก่อน เพราะ watch จะสืบทอด working directory มาจาก shell ที่เรียกใช้ และ docker compose จำเป็นต้องรันในไดเรกทอรีของโปรเจกต์นั้น watch จะบอกคุณว่ามีการรีสตาร์ทเกิดขึ้น ส่วน docker compose logs -f web จะบอกสาเหตุ เมื่อทราบสาเหตุแล้ว ให้เขียนคำตอบนั้นลงใน Compose healthcheck ที่รีสตาร์ทคอนเทนเนอร์ให้คุณ เพื่อที่คุณจะได้ไม่ต้องมานั่งเฝ้าหน้าจอ

การต่ออายุใบรับรองที่กำลังจะมาถึง

sudo -i
watch -n 60 -g 'openssl x509 -noout -enddate -in /etc/letsencrypt/live/example.com/fullchain.pem'

คำสั่งนี้จะแสดงผลลัพธ์เพียงบรรทัดเดียวคือ notAfter=Nov 7 09:14:22 2026 GMT เท่านั้น ดังนั้น -g จะทำงานทันทีที่ไฟล์ถูกแทนที่ด้วยไฟล์ที่ต่ออายุใหม่ ไฟล์ภายใต้ /etc/letsencrypt/live สามารถอ่านได้โดย root เท่านั้น นี่คือเหตุผลที่ต้องรันคำสั่งนี้ใน root shell โปรดทราบว่ามันเป็นการเฝ้าดูใบรับรองบนดิสก์ เว็บเซิร์ฟเวอร์ที่กำลังทำงานอยู่จะเก็บใบรับรองเก่าไว้ในหน่วยความจำจนกว่าจะมีการ reload ดังนั้นให้ตรวจสอบสิ่งที่เซิร์ฟเวอร์กำลังใช้งานจริงด้วย echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -enddate และอย่ารันคำสั่งนั้นด้วย interval สองวินาทีกับโฮสต์สาธารณะ การต่ออายุใบรับรองควรจัดการผ่าน systemd service และ timer และ systemctl list-timers จะแสดงให้เห็นว่ามันจะทำงานครั้งถัดไปเมื่อใด

คิวที่กำลังถูกประมวลผล

watch -n 15 'postqueue -p | tail -n 1'

คำสั่งนั้นจะพิมพ์บรรทัดสรุป เช่น -- 24 Kbytes in 6 Requests. หรือ Mail queue is empty เมื่อประมวลผลเสร็จสิ้น รูปแบบเดียวกันนี้สามารถใช้กับคิวใดๆ ก็ตามที่คุณสามารถนับจำนวนได้: watch -n 5 'find /srv/queue/incoming -type f | wc -l'

ในจุดนี้ watch เริ่มมีข้อจำกัด เพราะมันทำได้เพียงเปรียบเทียบเฟรมปัจจุบันกับเฟรมก่อนหน้าเท่านั้น ไม่สามารถทดสอบเงื่อนไขได้ จึงไม่สามารถแจ้งเตือนคุณได้ว่า "จำนวนคิวลดลงเหลือศูนย์แล้ว" แต่คุณสามารถใช้ shell loop แบบปกติร่วมกับ command substitution เพื่อเก็บค่าจำนวนในแต่ละรอบได้:

until [ "$(find /srv/queue/incoming -type f | wc -l)" -eq 0 ]; do sleep 5; done; echo 'queue drained'

เมื่อคำสั่ง watch ไม่ใช่เครื่องมือที่เหมาะสม

watch จะรันคำสั่งของคุณซ้ำโดยไม่มีการจดจำสถานะของการรันครั้งก่อน และไม่ทราบว่าคำสั่งนั้นทำหน้าที่อะไร ซึ่งถือว่าเพียงพอสำหรับ df แต่จะไม่เหมาะสมใน 4 สถานการณ์ดังต่อไปนี้:

  • Logs: watch จะวาดหน้าจอใหม่ในกรอบที่คงที่ ทำให้บรรทัดที่ปรากฏขึ้นและเลื่อนหายไปในช่วงเวลาระหว่างสองรอบการทำงานสูญหายไป ให้ใช้ journalctl -fu nginx หรือ tail -f แทน ซึ่งจะแสดงบรรทัดใหม่แบบสตรีมทันทีที่มีการเขียนข้อมูล
  • คำสั่งที่ใช้ทรัพยากรสูง: du -sh / หรือการคิวรีฐานข้อมูลที่มีภาระงานสูงจะกลายเป็นภาระงานเบื้องหลังที่ทำงานตลอดเวลาในทุกช่วงเวลาที่กำหนด เพราะ watch จะสั่งเริ่มการทำงานใหม่ซ้ำๆ
  • สิ่งที่ส่งผลกระทบข้างเคียง (Side effects): คำสั่งที่มีการเขียนข้อมูล, โพสต์ข้อมูล, รีสตาร์ท หรือติดตั้งโปรแกรม จะทำงานซ้ำในทุกรอบการทำงาน การใช้ curl กับ API ทุกๆ 2 วินาที จะเท่ากับ 43,200 คำขอต่อวัน ซึ่งเป็นสาเหตุที่ทำให้ API key แบบฟรีถูกระงับการใช้งาน
  • การตรวจสอบระยะยาว: watch ทำงานอยู่ภายในเทอร์มินัลของคุณและจะสิ้นสุดการทำงานเมื่อเซสชันของคุณจบลง มันไม่แจ้งเตือนใครและไม่มีประวัติการทำงานหลังจากที่คุณปิดแล็ปท็อป สำหรับงานประเภทนี้ คุณควรใช้ ระบบตรวจสอบสถานะจริง เช่น Uptime Kuma หรือการตรวจสอบตามกำหนดเวลาที่ทำงานอยู่บนเซิร์ฟเวอร์

ขอบเขตที่ชัดเจนคือเรื่องของเวลา watch เหมาะสำหรับช่วงเวลา 10 นาทีที่คุณใช้รอให้เหตุการณ์บางอย่างเกิดขึ้นเท่านั้น สิ่งใดก็ตามที่ยังคงต้องตรวจสอบในวันพรุ่งนี้ ควรอยู่ในรูปแบบของ scheduled timer หรือระบบตรวจสอบสถานะจริง

การรัน watch ภายใน tmux ขณะใช้งานผ่าน SSH

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

tmux new -As ops
watch -n 30 -d 'df -h /'

กด Ctrl+b แล้วตามด้วย d เพื่อ detach ออกจากเซสชัน ลูปของคำสั่งจะยังคงทำงานอยู่บนเซิร์ฟเวอร์ เมื่อเชื่อมต่อกลับเข้ามาใหม่ด้วย tmux attach -t ops คุณจะพบว่าหน้าจอยังคงอัปเดตอยู่ โดยมีนาฬิกาที่ส่วนหัวเป็นตัวยืนยัน คุณสามารถแบ่งหน้าต่างเพื่อรัน watch ไว้ด้านหนึ่งและ journalctl -f ไว้อีกด้านหนึ่ง ซึ่งเป็นแนวคิดหลักของ เวิร์กเบนช์เทอร์มินัลที่ใช้ tmux เมื่อต้องตรวจสอบคำถามเดียวกันบนหลายเซิร์ฟเวอร์พร้อมกัน งานนี้ควรใช้ เครื่องมือที่สร้างมาเพื่อจัดการเซิร์ฟเวอร์ Linux จำนวนมาก แทนการเปิดหน้าต่าง watch หลายบานเรียงกัน

หน้าจอที่แสดงในที่นี้เป็นเพียงตัวอย่างประกอบเท่านั้น รูปแบบคอลัมน์และสตริงเวอร์ชันอาจแตกต่างกันไปตามการกระจายซอฟต์แวร์ (distribution) และรุ่นของ procps-ng ดังนั้นโปรดอ่าน man watch บนเครื่องของคุณเพื่อตรวจสอบ flag ที่ build ของคุณรองรับจริง

FAQ

เหตุใด watch จึงละเลย pipe ใน watch mycmd | grep foo?

Shell ของคุณจะแยกบรรทัดที่ตำแหน่ง pipe ก่อนที่ watch จะเริ่มทำงาน ส่งผลให้ watch นำผลลัพธ์การแสดงผลบนหน้าจอของตัวมันเองไป pipe ต่อให้ grep แทนที่จะเป็นการกรองผลลัพธ์จากคำสั่งที่คุณต้องการ ให้ครอบทั้ง pipeline ด้วยเครื่องหมายคำพูดแทน เช่น watch 'mycmd | grep foo' วิธีนี้จะทำให้ watch ส่งอาร์กิวเมนต์ชุดเดียวไปให้ sh -c ซึ่งจะรัน pipeline นั้นซ้ำในทุกรอบ กฎเดียวกันนี้ยังใช้กับการทำ glob และ command substitution ด้วย

ควรตั้งค่า interval เท่าใดเมื่อใช้ watch?

ให้เลือกตามความเร็วในการเปลี่ยนแปลงของค่าที่ต้องการติดตามและความหนักของคำสั่งนั้นๆ ช่วงเวลา 0.5 วินาทีเหมาะสำหรับตัวนับที่เปลี่ยนแปลงเร็ว และ 0.1 วินาทีคือช่วงเวลาที่สั้นที่สุดที่ watch รองรับ สำหรับการตรวจสอบดิสก์หรือใบรับรอง ช่วงเวลา 30 ถึง 60 วินาทีถือว่าเหมาะสม ระยะเวลาที่คำสั่งใช้รันจะถูกบวกเพิ่มเข้าไปในช่องว่างระหว่างรอบ เว้นแต่คุณจะใช้แฟล็ก -p ดังนั้นหากใช้ -n 1 คำสั่งที่ทำงานช้าจะถูกรันต่อเนื่องกันไปโดยไม่มีการหยุดพัก

watch สามารถใช้ติดตามไฟล์ log ได้หรือไม่?

ไม่ได้ watch จะวาดหน้าจอใหม่ทีละเฟรมและไม่เก็บประวัติ ดังนั้นบรรทัดใดที่ปรากฏขึ้นและเลื่อนหายไปในช่วงระหว่างสองรอบการทำงานจะสูญหายไปอย่างถาวร ควรใช้ journalctl -fu <unit> หรือ tail -f เพื่อแสดงบรรทัดใหม่ทันทีที่เกิดขึ้นซึ่งเป็นสิ่งที่ไฟล์ log ต้องการ ให้ใช้ watch สำหรับค่าที่มีสถานะปัจจุบันเท่านั้น เช่น เปอร์เซ็นต์การใช้งานดิสก์หรือความยาวของคิว

จะทำให้ watch หยุดทำงานเมื่อสิ่งที่รอคอยเกิดขึ้นได้อย่างไร?

ให้ใช้ -g (--chgexit) และระบุคำสั่งที่ให้ผลลัพธ์คงที่จนกว่าเหตุการณ์นั้นจะเกิดขึ้น หากผลลัพธ์มีนาฬิกาหรือ PID จะทำให้ค่าเปลี่ยนไปในรอบแรกและหยุดทำงานทันที ดังนั้น systemctl is-active myapp จึงใช้งานได้ในกรณีที่ systemctl status myapp ใช้งานไม่ได้ สำหรับเงื่อนไขที่ซับซ้อน เช่น การรอให้ตัวนับลดลงจนถึงศูนย์ ให้ใช้ลูป until ใน shell แทน เพราะ watch สามารถตรวจจับได้เพียงว่าผลลัพธ์มีการเปลี่ยนแปลงเท่านั้น

เหตุใด watch จึงแจ้งว่า command not found ทั้งที่คำสั่งนั้นใช้งานได้ใน shell ของฉัน?

watch จะส่งคำสั่งไปให้ sh -c ซึ่ง shell ดังกล่าวไม่ได้อ่านไฟล์ .bashrc ดังนั้น alias และฟังก์ชัน shell ของคุณจึงไม่มีผลในสภาพแวดล้อมนั้น ข้อความแจ้งเตือนมักจะเป็น sh: 1: ll: not found ให้เขียนคำสั่งเต็มรูปแบบ หรือใช้ path เต็มของ binary ในกรณีที่โปรแกรมนั้นอยู่ใน PATH ของคุณเท่านั้น