Paano Gamitin ang watch Command sa Linux
Alamin kung paano magtakda ng interval, i-highlight ang diff, huminto kapag may pagbabago, at mag-quote ng pipes para tumakbo nang tama ang watch command.
Ano ang ginagawa ng watch command
Ang watch command ay paulit-ulit na nagpapatakbo ng isa pang command sa nakatakdang interval at nire-redraw ang output nito sa parehong bahagi ng screen. Ang default na interval ay two seconds. Gamitin ito kapag naghihintay kang magbago ang isang value: mapuno ang disk, maging stable ang isang container, makumpleto ang pag-renew ng certificate, o maubos ang laman ng queue.
Ang watch ay bahagi ng procps-ng at naka-install na sa bagong Ubuntu o Debian VPS bilang bahagi ng procps package. Suriin ang version nito bago umasa sa anumang flag sa ibaba, dahil recent ang dalawa sa mga kapaki-pakinabang na option.
watch --versionSa Ubuntu 24.04, nagpi-print ito ng linyang gaya ng watch from procps-ng 4.0.4. Narito ang pinakasimpleng kapaki-pakinabang na halimbawa.
watch df -h /Lilinisin ng screen at ipapakita ang header line, isang blank line, at pagkatapos ang output ng df -h /:
Every 2.0s: df -h / server1: Sun Aug 9 10:21:44 2026Sa kaliwa makikita ang interval at ang eksaktong command na pinapatakbo ng watch. Sa kanan makikita ang hostname at kasalukuyang oras. Kapaki-pakinabang ang clock dahil pinatutunayan nitong patuloy na nagre-refresh ang screen kahit hindi nagbabago ang mga value sa ibaba nito. Pindutin ang Ctrl+C upang lumabas.
Gumuguhit ang watch ng isang frame na kasya sa terminal. Nagwa-wrap ang mahahabang linya, samantalang pinuputol ng -w ang mga ito, at hindi talaga iginuguhit ang anumang lampas sa pinakailalim na row. Walang scrollback sa loob ng frame dahil bawat cycle ay nag-o-overwrite sa naunang frame. Ang simpleng katotohanang ito ang nagtatakda kung para saan pinakamainam gamitin ang watch.
Gaano kadalas dapat muling patakbuhin ng watch ang command?
Default lamang ang two seconds. Piliin ang interval batay sa bilis ng pagbabago ng value at sa tagal o resource na kailangan ng bawat run.
-n 0.5para sa mga counter na patuloy na nagbabago, gaya ngss -so byte count ng interface. Ang pinakamaliit na interval na tinatanggap ng watch ay 0.1 seconds.-n 30o-n 60para sa mga disk at certificate. Ang filesystem na napupuno sa loob ng isang araw ay hindi kailangang suriin nang tatlumpung beses bawat minuto.
Pinapatakbo ng watch ang command, hinihintay itong matapos, at saka lamang natutulog sa itinakdang interval. Idinadagdag ang runtime sa pagitan ng mga run. Kaya kung walong segundo ang itinatagal ng isang command sa ilalim ng -n 2, magkakaroon ka ng frame bawat sampung segundo at tuloy-tuloy na magiging abala ang machine. Idagdag ang -p (--precise) upang subukang simulan ng watch ang bawat run kada interval seconds. Sinusukat ito mula sa pagsisimula ng isang run hanggang sa pagsisimula ng kasunod.
Kung palagi mong gustong gumamit ng ibang default, i-export ang WATCH_INTERVAL sa shell profile mo. Mas mananaig pa rin dito ang tahasang -n. Patakbuhin ang watch --help upang kumpirmahing binabasa ng build mo ang variable na iyon.
I-highlight ang mga pagbabago gamit ang -d
Mahirap basahin ang maraming magkakaparehong text para mahanap ang isang field na nagbago ng puwesto. -d (--differences) ang gagawa nito para sa iyo.
watch -n 30 -d 'df -h / /var'Ang mga character na naiiba sa nakaraang frame ay ipinapakita sa reverse video. Dahil dito, iilaw agad ang Use% cell kapag gumalaw ito, habang hindi nagbabago ang iba. Kung hindi hiwalay na filesystem ang /var, makikita mong dalawang beses nakalista ang root filesystem. Mabilis itong paraan para malaman kung paano hinati ang mga partition ng system.
Positional ang paghahambing. Ibig sabihin, inihahanay ng watch ang mga linya ng bagong frame sa lumang frame at inihahambing ang mga ito character by character. Kapag nagbabago ang lapad ng mga column sa output, halos lahat ng bahagi ay mai-highlight. Kaya mas mainam na gumamit ng mga command na stable ang layout. Tinatanggap din ng kasalukuyang procps-ng ang watch --differences=permanent. Pinapanatili nitong naka-highlight ang bawat posisyong nagbago kahit hindi na ito ang pinakabagong pagbabago. Kumpirmahin ito gamit ang watch --help bago ito asahan.
Paano ko mapapahinto ang watch kapag nagbago ang output?
-g (--chgexit) ang nagpapahinto sa watch sa unang pagkakataong naiiba ang output sa naunang run. Babalik ang prompt, kaya maaari kang magpatakbo ng ibang command pagkatapos nito sa parehong linya.
watch -n 10 -g 'systemctl is-active myapp' ; echo 'state changed'Ito ang flag na ginagawang tool ang watch para sa “sabihin sa akin kapag natapos na ang deploy.” May isang karaniwang problema ito: saklaw ng comparison ang buong output. Kaya kung may clock o PID (process identifier) sa output, magbabago ito sa unang refresh pa lamang at agad na hihinto ang watch. Ipinapakita ng systemctl status myapp ang lumipas na oras at memory use, kaya walang silbi ang -g dito. Limitahan ang command sa nag-iisang stable na value na hinihintay mo. Iyon ang ginagawa ng systemctl is-active.
Sa mga mas bagong procps-ng, mayroon ding kabaligtarang test na --equexit <cycles>. Hihinto ito kapag nanatiling pareho ang output sa itinakdang bilang ng cycles. Sinasagot nito ang “sabihin sa akin kapag tumigil na ang pagbabago.” Tingnan ang watch --help, dahil wala ito sa mga mas lumang build.
Bakit hindi pinapansin ng watch ang pipe at glob ko?
Ito ang problemang nararanasan ng halos lahat nang isang beses, at nasa shell mo ang sanhi, hindi sa watch.
watch docker compose ps | grep webBinabasa ng interactive shell mo ang buong linya bago ito magpatakbo ng anuman, at hinahati nito ang linya sa pipe. Sinisimulan nito ang watch docker compose ps at ikinokonekta ang sariling screen output ng watch sa grep. Hindi na nagsusulat ang watch sa terminal, kaya sira o walang laman ang display, at ang grep ay nagfi-filter ng redraw output sa halip na listahan ng container.
I-quote ang buong pipeline para maipasa ito bilang isang argumento.
watch 'docker compose ps | grep web'Ipinapasa ng watch ang string na iyon sa sh -c, at pinapatakbo ng shell na iyon ang pipeline isang beses sa bawat cycle. Pareho ang tuntunin sa globs, ngunit mas tahimik ang sintomas.
watch ls -l /var/log/*.log
watch 'ls -l /var/log/*.log'Minsan lang ine-expand ng unang linya ang glob, sa shell mo, kapag pinindot mo ang Enter. Pagkatapos, inuulit ng watch ang nakapirming listahan ng mga filename, kaya hindi lumilitaw ang log file na nalikha makalipas ang isang minuto. Ipinapasa naman ng ikalawang linya ang glob sa watch, na nag-e-expand nito sa loob ng sh sa bawat cycle, kaya awtomatikong lumilitaw ang mga bagong file.
Tinutukoy din ng quotes kung kailan ine-evaluate ang variable o command substitution. Isinasagawa ng watch "echo $(date)" ang date isang beses, sa shell mo, at pagkatapos ay paulit-ulit na ipinapakita ang nakapirming string na iyon. Isinasagawa naman ng watch 'echo $(date)' ang date sa bawat cycle. Ibig sabihin ng single quotes ay mamaya; ibig sabihin ng double quotes ay ngayon.
May dalawa pang epekto ang sh -c na iyon:
- Hindi umiiral dito ang aliases at shell functions. Nabibigo ang
watch llna maysh: 1: ll: not founddahil hindi binabasa ngsh -cang.bashrcmo. Isulat nang buo ang command, o ibigay ang buong path sa binary na nasa interactivePATHmo lamang. - Mahalagang makuha ang standard error. Ilagay ang
2>&1sa loob ng quotes kapag gusto mong mailagay ang error text sa frame sa halip na kumalat sa paligid nito.
Kapag nagiging mahirap ang pag-quote, direktang pinapatakbo ng -x (--exec) ang command sa halip na sa pamamagitan ng sh -c. Mas madaling gamitin ang mga argumentong may spaces, at tuluyang hindi gagana ang pipes at globs dahil wala nang shell na mag-i-interpret sa mga ito.
Pareho ang lohika sa privileges dahil ordinaryong process ang watch. Tatamaan ng watch 'sudo ss -tulpn' ang password prompt na hindi mo makikita o matatayp. Sa halip, patakbuhin ang sudo watch 'ss -tulpn', at tandaan na tatakbo bilang root ang buong loop hanggang pindutin mo ang Ctrl+C.
Apat na bagay na dapat bantayan sa isang VPS
Isang disk na napupuno
watch -n 30 -d 'df -h / /var'Humihingi ang df sa kernel ng mga value na hawak na nito, kaya sapat itong magaan para ulit-ulitin nang tuloy-tuloy. Hindi ganoon ang du -sh /var/log dahil binabasa nito ang bawat file sa buong tree sa bawat cycle. Kapag isinailalim sa watch, patuloy nitong binabasa ang disk at pinapabagal nito ang machine na sinusubukan mong i-diagnose. Patakbuhin nang isang beses ang du, o gamitin ang ncdu, pagkatapos ay iwan ang df sa ilalim ng watch upang makita kung patuloy pang tumataas ang value.
Isang container na paulit-ulit na nagre-restart
cd /srv/myapp
watch -n 5 -d 'docker compose ps'Ipinapakita ng status column kung gaano katagal nang tumatakbo ang bawat container. Ang container na nasa crash loop ay paulit-ulit na bumabalik sa "Up 2 seconds", at malinaw itong ipinapakita ng -d. Magpalit muna ng directory dahil minamana ng watch ang working directory ng shell na nag-start dito at kailangan ng docker compose ang project directory nito. Ipinapaalam ng watch na may restart na nagaganap. Ipinapaliwanag naman ng docker compose logs -f web kung bakit. Kapag alam mo na ang dahilan, ilagay ito sa Compose healthcheck na awtomatikong nagre-restart sa container para walang kailangang umupo at tumitig sa screen.
Isang certificate renewal na natatapos
sudo -i
watch -n 60 -g 'openssl x509 -noout -enddate -in /etc/letsencrypt/live/example.com/fullchain.pem'Nagpi-print ang command ng isang linya, notAfter=Nov 7 09:14:22 2026 GMT, at wala nang iba, kaya eksaktong nagti-trigger ang -g kapag napalitan ang file ng bagong certificate. Root lamang ang makakabasa sa mga file sa ilalim ng /etc/letsencrypt/live, kaya tumatakbo ito sa root shell. Tandaan na ang certificate na nasa disk ang mino-monitor nito. Pinananatili ng tumatakbong web server sa memory ang lumang certificate hanggang sa mag-reload ito, kaya suriin kung ano talaga ang sine-serve gamit ang echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -enddate, at huwag patakbuhin ang command na iyon kada two seconds laban sa public host. Ang renewal mismo ay dapat nasa systemd service at timer, at ipinapakita ng systemctl list-timers kung kailan ito susunod na tatakbo.
Isang queue na nauubos
watch -n 15 'postqueue -p | tail -n 1'Nagpi-print ito ng summary line gaya ng -- 24 Kbytes in 6 Requests., o Mail queue is empty kapag tapos na. Gumagana rin ang parehong pattern para sa anumang queue na kaya mong bilangin: watch -n 5 'find /srv/queue/incoming -type f | wc -l'.
Dito naabot ng watch ang limitasyon nito. Inihahambing nito ang isang frame sa naunang frame, at hindi ito makakapagsuri ng condition, kaya hindi nito masasabi na "umabot sa zero ang count". Magagawa ito ng isang simpleng shell loop gamit ang command substitution upang makuha ang count sa bawat pass:
until [ "$(find /srv/queue/incoming -type f | wc -l)" -eq 0 ]; do sleep 5; done; echo 'queue drained'Kapag maling tool ang watch command
Muling pinapatakbo ng watch ang command mo nang walang alaala sa nakaraang run at walang kaalaman kung ano ang ginagawa ng command na iyon. Ayos ito para sa df. Mali ito sa apat na sitwasyon.
- Logs. Nirere-draw ng
watchang isang fixed na frame, kaya nawawala ang mga linyang lumilitaw at nagso-scroll palabas sa pagitan ng dalawang cycle. Gamitin angjournalctl -fu nginxotail -f, na nag-i-stream ng mga bagong linya habang sinusulat ang mga ito. - Mga command na mabigat patakbuhin. Ang
du -sh /o query sa busy na database ay nagiging permanenteng background load sa kahit anong interval, dahil patuloy itong muling sinisimulan ngwatch. - Anumang may side effect. Ang command na nagsusulat, nagpo-post, nagre-restart, o nag-i-install ay uulitin sa bawat cycle. Ang isang
curlsa isang API kada dalawang segundo ay katumbas ng 43,200 request bawat araw. Dahil dito, maaaring ma-suspend ang isang libreng API key. - Mga matagalang check. Tumatakbo ang
watchsa terminal mo at namamatay kasama ng session mo. Wala itong ina-alerto at hindi ito nag-iingat ng history kapag isinara mo ang laptop. Para rito, kailangan mo ng isang totoong status monitor gaya ng Uptime Kuma, o isang scheduled check na nananatili sa server.
Ang malinaw na hangganan ay oras. Para ang watch sa sampung minutong paghihintay mo para mangyari ang isang partikular na bagay. Anumang dapat patuloy na mag-check bukas ay dapat ilagay sa isang scheduled timer o isang totoong monitor.
Patakbuhin ang watch sa loob ng tmux kapag naka-SSH ka
Sa SSH, kasing-tatag lamang ng koneksyon ang watch. Kapag naputol ang link, makakatanggap ang shell mo ng SIGHUP at hihilahin nitong pababa ang watch. Inaayos ito ng tmux, kaya tunay na kapaki-pakinabang ang watch sa remote box.
tmux new -As ops
watch -n 30 -d 'df -h /'Pindutin ang Ctrl+b at pagkatapos ay d upang mag-detach. Patuloy na tatakbo ang loop sa server. Kumonekta muli gamit ang tmux attach -t ops at patuloy pa ring mag-a-update ang frame; pinatutunayan ito ng orasan sa header. I-split ang window upang mapanatili ang watch sa isang panig at ang journalctl -f sa kabila. Ito ang pangunahing ideya sa likod ng isang terminal workbench na nakabatay sa tmux. Kapag pareho ang tanong para sa ilang box nang sabay-sabay, trabaho iyon para sa isang tool na ginawa para mag-manage ng maraming Linux server, hindi para sa isang pader ng watch pane.
Naglalarawan lamang ang mga screen na sinipi rito. Nagkakaiba ang layout ng mga column at version string depende sa distribution at sa mga release ng procps-ng, kaya basahin ang man watch sa sarili mong machine upang makita ang mga flag na aktuwal na mayroon ang build mo.
FAQ
Bakit binabalewala ng watch ang pipe sa watch mycmd | grep foo?
Hinahati ng shell ang line sa pipe bago pa man magsimula ang watch, kaya ipinapasa nito sa grep ang sariling screen drawing ng watch, at hindi nafi-filter ang output ng command. I-quote ang buong pipeline: watch 'mycmd | grep foo'. Ipinapasa ng watch ang nag-iisang argument na iyon sa sh -c, na nagpapatakbo ng pipeline sa bawat cycle. Pareho ring naaangkop ang panuntunang ito sa mga glob at command substitution.
Anong interval ang dapat kong gamitin sa watch?
Iayon ito sa bilis ng pagbabago ng value at sa tagal ng isang run. Ang kalahating segundo ay angkop sa mabilis na counter, at ang 0.1 segundo ang pinakamaliit na interval na tinatanggap ng watch. Ang 30 hanggang 60 segundo ay angkop sa mga disk at certificate. Idinaragdag ang runtime ng command sa pagitan maliban kung ipasa mo ang -p, kaya ang mabagal na command sa ilalim ng -n 1 ay sunod-sunod na tumatakbo at hindi kailanman naghihintay.
Maaari bang subaybayan ng watch ang isang log file?
Hindi. Nagre-redraw ang watch ng isang frame at hindi nagtatago ng history, kaya tuluyan nang nawawala ang anumang line na lumitaw at nag-scroll palayo sa pagitan ng dalawang cycle. Ang journalctl -fu <unit> at tail -f ay nag-stream ng mga bagong line habang dumarating ang mga ito, na siyang kailangan ng mga log. Gamitin ang watch para sa mga value na may kasalukuyang state, gaya ng disk percentage o haba ng queue.
Paano ko mapapahinto ang watch kapag nangyari na ang hinihintay ko?
Gamitin ang -g (--chgexit) at bigyan ito ng command na nananatiling pareho ang output hanggang mangyari ang event na iyon. Ang output na may clock o PID ay nagbabago sa unang refresh at agad na nag-e-exit, kaya gumagana ang systemctl is-active myapp kung saan hindi gumagana ang systemctl status myapp. Para sa aktuwal na condition gaya ng count na umabot sa zero, gumamit ng shell until loop, dahil output change lamang ang nade-detect ng watch.
Bakit sinasabi ng watch na command not found para sa command na gumagana naman sa shell ko?
Ipinapasa ng watch ang command sa sh -c, at hindi binabasa ng shell na iyon ang .bashrc, kaya wala roon ang iyong aliases at shell functions. Karaniwang sh: 1: ll: not found ang mensahe. Isulat nang buo ang aktuwal na command, o gamitin ang full path para sa binary na nasa interactive PATH mo lamang.