Jinsi ya kutumia amri ya watch katika Linux kwa usahihi
Amri ya watch huendesha amri yoyote kila sekunde mbili. Jifunze kubadilisha muda, kuangazia mabadiliko, na kutumia alama za kunukuu ili kuendesha mabomba kwa ufanisi zaidi.
Kazi ya amri ya watch
Amri ya watch huendesha amri nyingine mara kwa mara kwa muda maalum na kuchora upya matokeo yake katika sehemu ileile kwenye skrini. Muda chaguo-msingi ni sekunde mbili. Itumie unapongojea namba kubadilika: diski inayojaa, kontena linalotulia, cheti kinachohuishwa, au foleni inayopungua.
watch inatoka kwenye procps-ng na tayari imesakinishwa kwenye VPS mpya ya Ubuntu au Debian kama sehemu ya kifurushi cha procps. Hakiki toleo lako kabla ya kuamini flag yoyote hapa chini, kwa sababu chaguzi mbili muhimu ni za hivi karibuni.
watch --versionKwenye Ubuntu 24.04 hiyo huchapisha mstari kama watch from procps-ng 4.0.4. Sasa huu ni mfano rahisi zaidi unaofaa.
watch df -h /Skrini husafishwa na kuonyesha mstari wa kichwa, mstari mtupu, kisha matokeo ya df -h /:
Every 2.0s: df -h / server1: Sun Aug 9 10:21:44 2026Upande wa kushoto ni muda wa kusubiri na amri kamili ambayo watch inaendesha. Upande wa kulia ni hostname na muda wa sasa. Saa ndiyo nusu inayofaa, kwa sababu inathibitisha kuwa skrini bado inajirudisha wakati namba zilizo chini yake hazisogei. Bonyeza Ctrl+C ili kutoka.
watch huchora fremu moja inayotoshea kwenye terminal. Mistari mirefu hujikunja, -w huikata badala yake, na chochote kilicho chini ya mstari wa mwisho hakichorwi kabisa. Hakuna uwezo wa kusogeza juu (scrollback) ndani ya fremu, kwa sababu kila mzunguko hufuta ule uliopita. Ukweli huo mmoja ndio huamua mambo mengi ambayo watch inafaa kwa ajili yake.
Ni mara ngapi watch inapaswa kurudia amri?
Sekunde mbili ni thamani ya awali pekee. Chagua muda wa kusubiri kulingana na kasi ya mabadiliko ya thamani na gharama ya kuendesha amri hiyo.
-n 0.5kwa vihesabio vinavyobadilika kila mara, kama viless -sau idadi ya byte za interface. Muda mfupi zaidi ambao watch hukubali ni sekunde 0.1.-n 30au-n 60kwa diski na vyeti (certificates). Mfumo wa faili unaojaa ndani ya siku moja hauhitaji fremu thelathini kwa dakika.
watch huendesha amri, husubiri imalize, na ndipo huanza kusubiri kwa muda uliowekwa. Muda wa utekelezaji huongezeka kwenye pengo hilo, kwa hivyo amri inayochukua sekunde nane chini ya -n 2 itakupa fremu kila baada ya sekunde kumi na kuifanya mashine iwe na shughuli wakati wote. Ongeza -p (--precise) ili watch ijaribu kuanza utekelezaji kila baada ya sekunde za muda uliowekwa, ikipimwa kuanzia mwanzo wa utekelezaji mmoja hadi mwanzo wa ule unaofuata.
Ikiwa unataka thamani tofauti ya awali kila wakati, export WATCH_INTERVAL kwenye shell profile yako. -n ya wazi bado itashinda thamani hiyo. Tekeleza watch --help ili kuthibitisha kuwa build yako inasoma variable hiyo.
Angazia mabadiliko kwa kutumia -d
Kusoma maandishi mengi yanayofanana ili kutafuta sehemu moja iliyobadilika ni kazi ngumu. -d (--differences) inakufanyia kazi hiyo.
watch -n 30 -d 'df -h / /var'Herufi zinazotofautiana na fremu iliyotangulia zinaonyeshwa kwa rangi iliyogeuzwa, kwa hivyo seli ya Use% huwaka pindi tu inapohama na kila kitu kingine kinabaki kimya. Ikiwa /var si mfumo wa faili tofauti, utaona mfumo wa faili wa root ukiorodheshwa mara mbili, ambayo ni njia ya haraka ya kujua jinsi seva ilivyogawanywa (partitioned).
Ulinganisho huu ni wa kimsimamo, kumaanisha kuwa watch hulinganisha mistari ya fremu mpya na ile ya zamani herufi kwa herufi. Matokeo ambayo safu zake hubadilika upana yatawaka karibu yote, kwa hivyo pendelea amri zenye mpangilio thabiti. Toleo la sasa la procps-ng pia linakubali watch --differences=permanent, ambalo huweka kila nafasi iliyowahi kubadilika ikiwa imeangaziwa badala ya mabadiliko ya hivi karibuni pekee. Ithibitishe kwa watch --help kabla ya kuitegemea.
Ninawezaje kuifanya watch itoke wakati matokeo yanapobadilika?
-g (--chgexit) husimamisha watch mara ya kwanza matokeo yanapokuwa tofauti na yale ya awali. Prompt yako inarudi, kwa hivyo unaweza kuweka amri nyingine baada yake kwenye mstari uleule.
watch -n 10 -g 'systemctl is-active myapp' ; echo 'state changed'Hii ndiyo flag inayobadilisha watch kuwa zana ya "niambie wakati deploy imekamilika". Ina mtego mmoja, na kila mtu huangukia humo: ulinganisho unahusu matokeo yote, kwa hivyo saa yoyote au PID (process identifier) iliyo ndani yake hubadilika kwenye refresh ya kwanza kabisa na watch hutoka mara moja. systemctl status myapp huchapisha muda uliopita na matumizi ya kumbukumbu, kwa hivyo -g juu yake haina maana. Punguza amri hiyo iwe ukweli mmoja thabiti unaousubiri, ambao ndio unaopatikana kupitia systemctl is-active.
Matoleo mapya ya procps-ng yanaongeza jaribio la kinyume, --equexit <cycles>, ambalo hutoka baada ya matokeo kubaki vilevile kwa mizunguko hiyo mingi. Hii inajibu swali la "niambie wakati kitu hiki kimetulia". Angalia watch --help, kwa sababu matoleo ya zamani hayana kipengele hiki.
Kwa nini watch inapuuza pipe na glob yangu?
Hili ni tatizo ambalo kila mtu hukutana nalo, na chanzo chake kipo kwenye shell yako badala ya watch.
watch docker compose ps | grep webShell yako ya maingiliano (interactive shell) inasoma mstari mzima kabla ya kitu chochote kuanza, na inagawanya mstari huo kwenye pipe. Inaanza watch docker compose ps na kuunganisha output ya skrini ya watch yenyewe kwenye grep. watch haiandiki tena kwenye terminal, kwa hivyo onyesho linaharibika au kuwa tupu, na grep inachuja output ya kuchora upya badala ya orodha ya container.
Weka alama za kunukuu (quotes) kwenye pipeline nzima ili ifike kama hoja (argument) moja.
watch 'docker compose ps | grep web'watch inapitisha kamba hiyo kwa sh -c, na shell hiyo inaendesha pipeline mara moja kwa kila mzunguko. Globs hufuata kanuni hiyo hiyo na dalili tulivu zaidi.
watch ls -l /var/log/*.log
watch 'ls -l /var/log/*.log'Mstari wa kwanza unapanua glob mara moja, kwenye shell yako, wakati unapobonyeza Enter. watch kisha inaendesha upya orodha iliyoganda ya majina ya faili, kwa hivyo faili ya log iliyoundwa dakika moja baadaye haionekani kamwe. Mstari wa pili unakabidhi glob kwa watch, ambayo inapanua ndani ya sh katika kila mzunguko, kwa hivyo faili mpya zinaonekana zenyewe.
Alama za kunukuu pia huamua wakati variable au uingizwaji wa amri (command substitution) unapotathminiwa. watch "echo $(date)" inaendesha date mara moja, kwenye shell yako, kisha inarudia kamba hiyo iliyowekwa milele. watch 'echo $(date)' inaendesha date kila mzunguko. Alama za kunukuu moja (single quotes) humaanisha baadaye. Alama za kunukuu mbili (double quotes) humaanisha sasa.
Matokeo mengine mawili ya sh -c hiyo:
- Aliases na shell functions hazipo ndani yake.
watch llinashindwa nash: 1: ll: not found, kwa sababush -chaisomi kamwe.bashrcyako. Andika amri halisi, au toa njia kamili (full path) ya binary ambayo ipo kwenyePATHyako ya maingiliano pekee. - Standard error inafaa kunaswa. Weka
2>&1ndani ya alama za kunukuu wakati unataka maandishi ya hitilafu yaonyeshwe kwenye fremu badala ya kutawanyika juu yake.
Wakati uwekaji wa alama za kunukuu unapokuwa mgumu, -x (--exec) inaendesha amri moja kwa moja badala ya kupitia sh -c. Hoja zenye nafasi (spaces) huwa rahisi, na pipe na globs huacha kufanya kazi kabisa, kwa sababu hakuna shell iliyobaki ya kuzitafsiri.
Upendeleo (privileges) hufuata mantiki hiyo hiyo, kwa kuwa watch ni mchakato wa kawaida. watch 'sudo ss -tulpn' inakutana na ombi la nenosiri ambalo huwezi kuliona au kuliandika. Endesha sudo watch 'ss -tulpn' badala yake, na kumbuka kitanzi kizima kisha kinaendeshwa kama root hadi utakapobonyeza Ctrl+C.
Mambo manne ya kufuatilia kwenye VPS
Diski inayojaza nafasi
watch -n 30 -d 'df -h / /var'df huomba kernel takwimu ilizonazo tayari, hivyo ni rahisi kurudiwa bila kikomo. du -sh /var/log si hivyo, kwa sababu huchunguza kila faili kwenye mti wa saraka kila mzunguko. Unapoiweka chini ya watch, inasoma diski mfululizo na kupunguza kasi ya mashine unayojaribu kuichunguza. Endesha du mara moja, au tumia ncdu, kisha acha df ikiwa chini ya watch ili kukuambia kama namba inaendelea kupanda.
Kontena linalojianzisha upya mara kwa mara
cd /srv/myapp
watch -n 5 -d 'docker compose ps'Safu ya status inaonyesha muda ambao kila kontena imekuwa ikiendelea. Kontena iliyo kwenye crash loop hujianzisha upya na kuonyesha "Up 2 seconds", na -d hufanya hali hiyo ionekane wazi kwa haraka. Badilisha saraka kwanza, kwa sababu watch hurithi saraka ya kazi ya shell iliyoianzisha na docker compose inahitaji saraka yake ya mradi. watch hukuambia kuwa kuanzishwa upya kunatokea. docker compose logs -f web hukuambia sababu. Ukishajua sababu, weka jibu hilo kama healthcheck ya Compose inayokianzisha upya kontena kwa ajili yako ili mtu yeyote asilazimike kukaa na kutazama skrini.
Upyaji wa cheti (certificate renewal)
sudo -i
watch -n 60 -g 'openssl x509 -noout -enddate -in /etc/letsencrypt/live/example.com/fullchain.pem'Amri hii huchapisha mstari mmoja, notAfter=Nov 7 09:14:22 2026 GMT, na si kitu kingine, hivyo -g hufanya kazi pale tu faili linapobadilishwa na jipya lililohuishwa. Faili zilizo chini ya /etc/letsencrypt/live zinaweza kusomwa na root pekee, ndiyo sababu hii huendeshwa kwenye root shell. Kumbuka kuwa inafuatilia cheti kilicho kwenye diski. Web server inayofanya kazi huweka cheti cha zamani kwenye kumbukumbu hadi itakapopakia upya (reload), kwa hivyo thibitisha kile kinachotolewa kweli kwa kutumia echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -enddate, na usiweke amri hiyo kwenye muda wa sekunde mbili dhidi ya host ya umma. Upyaji wenyewe unapaswa kuwa systemd service na timer, na systemctl list-timers huonyesha wakati kitakapofuata kuendeshwa.
Foleni inayopungua (queue draining)
watch -n 15 'postqueue -p | tail -n 1'Hiyo huchapisha mstari wa muhtasari kama -- 24 Kbytes in 6 Requests., au Mail queue is empty mara inapokamilika. Umbo hilo hilo hufanya kazi kwa foleni yoyote unayoweza kuihesabu: watch -n 5 'find /srv/queue/incoming -type f | wc -l'.
Hapa watch hufikia kikomo chake. Inalinganisha fremu moja na ile iliyotangulia, na haiwezi kupima masharti, hivyo haiwezi kukuambia "hesabu imefika sifuri". Shell loop ya kawaida inaweza, kwa kutumia command substitution ili kunasa hesabu katika kila mzunguko:
until [ "$(find /srv/queue/incoming -type f | wc -l)" -eq 0 ]; do sleep 5; done; echo 'queue drained'Wakati amri ya watch inapokuwa zana isiyofaa
watch huendesha upya amri yako bila kukumbuka matokeo ya awali na bila kujua amri hiyo inafanya nini. Hilo ni sawa kwa df. Ni kosa katika hali nne zifuatazo.
- Logs. watch huchora upya fremu iliyopangwa, kwa hivyo mistari inayotokea na kupotea kati ya mizunguko miwili hupotea. Tumia
journalctl -fu nginxautail -f, ambazo hutiririsha mistari mipya kadiri inavyoandikwa. - Amri nzito.
du -sh /au swali dhidi ya database yenye shughuli nyingi huwa mzigo wa kudumu wa chinichini kwa muda wowote, kwa sababu watch huendelea kuianzisha upya. - Chochote chenye athari za pembeni. Amri inayoandika, kuchapisha, kuanzisha upya au kusakinisha itafanya hivyo tena katika kila mzunguko.
curldhidi ya API kila sekunde mbili ni maombi 43,200 kwa siku, ambayo ndiyo njia ya API key ya bure kusimamishwa. - Uchunguzi wa muda mrefu. watch huendeshwa kwenye terminal yako na hufa pamoja na session yako. Haiangalii mtu yeyote na haihifadhi historia baada ya kufunga laptop. Kwa ajili hiyo unahitaji kifuatiliaji hali halisi kama Uptime Kuma, au uchunguzi uliopangwa unaoishi kwenye seva.
Mpaka wa kweli ni wakati. watch ni kwa ajili ya dakika kumi unazotumia kusubiri jambo moja mahususi litokee. Chochote kinachopaswa kuendelea kuchunguzwa kesho kinapaswa kuwa kwenye timer iliyopangwa au kifuatiliaji halisi.
Endesha watch ndani ya tmux ukiwa kwenye SSH
Ukiwa kwenye SSH, uimara wa watch unategemea muunganisho wako. Muunganisho ukikatika, shell yako hupokea SIGHUP na kuifunga watch pamoja nayo. tmux hutatua tatizo hili, na ndiyo inayofanya watch kuwa na manufaa kweli kwenye seva ya mbali.
tmux new -As ops
watch -n 30 -d 'df -h /'Bonyeza Ctrl+b kisha d ili kujiondoa (detach). Mzunguko (loop) utaendelea kufanya kazi kwenye seva. Unganisha tena baadaye kwa kutumia tmux attach -t ops na fremu itaendelea kusasishwa, huku saa iliyo kwenye kichwa cha habari ikithibitisha hilo. Gawanya dirisha na unaweza kuweka watch upande mmoja na journalctl -f upande mwingine, jambo ambalo ndilo wazo kuu nyuma ya kituo cha kazi cha terminal kinachotumia tmux. Swali hilo hilo linapohusu seva nyingi kwa wakati mmoja, hiyo ni kazi ya zana iliyoundwa kwa ajili ya kusimamia seva nyingi za Linux badala ya kutumia kuta za paneli za watch.
Skrini zilizotajwa hapa ni za kielelezo. Mpangilio wa safu wima na kamba za toleo hutofautiana kati ya usambazaji (distributions) na matoleo ya procps-ng, kwa hivyo soma man watch kwenye mashine yako ili kuona flag ambazo toleo lako linazo.
FAQ
Kwa nini watch hupuuza pipe katika watch mycmd | grep foo?
Shell yako hugawa mstari huo kwenye pipe kabla ya watch kuanza, kwa hivyo hupeleka mchoro wa skrini ya watch yenyewe kwenye grep, na matokeo ya amri hayachujwi kamwe. Weka pipeline nzima kwenye alama za kunukuu badala yake: watch 'mycmd | grep foo'. watch hupitisha hoja hiyo moja kwa sh -c, ambayo huendesha pipeline hiyo mara moja kwa kila mzunguko. Kanuni hiyo hiyo inatumika kwa globs na kwa command substitution.
Ni muda gani wa kusubiri (interval) ninaopaswa kutumia na watch?
Ulinganishe na kasi ya mabadiliko ya thamani na gharama ya uendeshaji wa amri hiyo. Nusu sekunde inafaa kwa kaunta za haraka, na sekunde 0.1 ndio muda mfupi zaidi unaokubalika na watch. Sekunde thelathini hadi sitini zinafaa kwa diski na vyeti (certificates). Muda wa uendeshaji wa amri huongezwa kwenye pengo hilo isipokuwa ukitumia -p, kwa hivyo amri ya polepole chini ya -n 1 huendeshwa mfululizo bila kusimama.
Je, watch inaweza kufuatilia faili ya log?
Hapana. watch huchora fremu moja na haihifadhi historia, kwa hivyo mstari wowote unaoonekana na kupotea kati ya mizunguko miwili hupotea kabisa. journalctl -fu <unit> na tail -f hutiririsha mistari mipya kadiri inavyofika, jambo ambalo ndilo linalohitajika kwa log. Tumia watch kwa thamani zenye hali ya sasa, kama vile asilimia ya diski au urefu wa foleni (queue length).
Ninawezaje kuifanya watch isimame wakati kitu ninachongojea kinatokea?
Tumia -g (--chgexit) na uipe amri ambayo matokeo yake hubaki vilevile hadi tukio hilo litokee. Matokeo yenye saa au PID hubadilika kwenye refresh ya kwanza na kutoka mara moja, kwa hivyo systemctl is-active myapp hufanya kazi pale ambapo systemctl status myapp haifanyi. Kwa hali halisi kama vile hesabu kufikia sifuri, tumia loop ya until ya shell, kwa sababu watch inaweza tu kutambua kuwa matokeo yamebadilika.
Kwa nini watch husema command not found kwa kitu kinachofanya kazi kwenye shell yangu?
watch hupitisha amri kwa sh -c, na shell hiyo haisomi .bashrc, kwa hivyo aliases na shell functions zako hazipo hapo. Ujumbe huo kwa kawaida ni sh: 1: ll: not found. Andika amri halisi, au tumia njia kamili (full path) kwa binary inayopatikana kwenye PATH yako ya maingiliano pekee.