如何每隔 X 秒無限次運行 Linux 命令
你是否曾經遇到過必須每隔幾秒重複執行特定 Linux 命令的情況?好吧,如果你還不知道,這個教程將教你如何操作。當然,你可以使用 shell 腳本或排程任務(cron jobs)來做到這一點。你也可以在特定的間隔重複執行 Linux 命令,而不必每次手動運行。這就是watch命令派上用場的地方。這個命令可以用來重複執行指定的命令,並監控輸出。簡單來說,我們可以使用 watch 命令每隔 X 秒執行一次 Linux 命令,並且它會持續在控制台顯示輸出,直到我們手動按下CTRL+C停止,或終止該進程,或強制重啟系統。默認情況下,指定的命令每 2 秒執行一次,或者你也可以設定自己選擇的時間間隔。
使用 watch 指令每隔 X 秒無限次執行 Linux 指令
watch 指令的語法是:
$ watch [options] command以下我舉了幾個例子來教你在哪裡可以使用 watch 指令來重複執行特定的 Linux 指令。
範例 1:
假設你想每 2 秒執行一次 uptime 指令來監控系統運行時間。要做到這一點,只需執行:
$ watch uptime
範例輸出:
Every 2.0s: uptime sk Wed Feb 9 20:14:46 2018
20:15:46 up 2:38, 1 users, load average: 0.41, 0.35, 0.46這裡
- 每 2.0 秒: uptime -
uptime指令將每 2 秒執行一次並顯示結果。 - sk - 目前登入的使用者
- 週三 2月 9 20:14:46 2018 - 我們執行命令時的當前日期和時間。
這將持續運行直到你手動結束它。要退出命令,請按 CTRL+C。
你也可以將 uptime 命令的輸出保存到檔案中。要這樣做,請執行:
$ watch `uptime` > uptime.txt或
$ watch `uptime` > uptime.doc當你想將系統的運行時間發送給技術支援以獲取幫助時,這可能很有用。
範例 2:
如我之前提到的,watch 命令預設每 2 秒執行一次程式。我們可以使用 -n 參數將其改為特定的間隔,例如 5 秒。
讓我們每五秒顯示一次檔案系統磁碟空間使用情況。
$ watch -n 5 df -h範例輸出:
Every 5.0s: df -h sk: Wed May 9 20:19:09 2018
Filesystem Size Used Avail Use% Mounted on
dev 3.9G 0 3.9G 0% /dev
run 3.9G 1.1M 3.9G 1% /run
/dev/sda2 457G 357G 77G 83% /
tmpfs 3.9G 32M 3.9G 1% /dev/shm
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs 3.9G 36K 3.9G 1% /tmp
/dev/loop0 83M 83M 0 100% /var/lib/snapd/snap/core/4327
/dev/sda1 93M 55M 32M 64% /boot
tmpfs 789M 28K 789M 1% /run/user/1000
要檢查此命令是否真的有效,請創建或刪除任何文件/資料夾。您會注意到在創建或刪除文件/資料夾後,輸出中的可用空間已經改變。
範例 3:
要查看目錄內容變化,請執行:
$ watch -d ls -l在這裡,-d 或 --differences 標誌將會突出顯示連續更新之間的差異。
範例輸出:
total 3857440
-rw------- 1 sk users 1921843200 Apr 25 22:47 bionic-desktop-amd64.iso
-rw------- 1 sk users 1921843200 Apr 25 03:02 bionic-desktop-amd64.iso.zs-old
drwxr-xr-x 2 sk users 12288 May 8 18:45 Desktop
drwxr-xr-x 2 sk users 4096 Apr 20 16:54 Documents
drwxr-xr-x 11 sk users 4096 May 9 19:56 Downloads
drwxr-xr-x 2 sk users 4096 Jan 7 2017 Music
drwxr-xr-x 5 sk users 12288 Mar 23 17:34 Pictures
drwxr-xr-x 2 sk users 4096 May 11 2016 Public此外,您可以顯示由特定使用者(例如 sk)擁有的目錄變更的內容。
$ watch -d 'ls -l | fgrep sk'這在多使用者系統中可能很有用。
範例 4:
要顯示記憶體詳細資訊,請執行:
$ watch -d free -m範例 5:
要每 10 秒顯示一次 du 命令的輸出,你可以使用:
$ watch -n 10 du -h範例輸出:
Every 10.0s: du -h sk: Wed May 9 20:26:43 2018
17M ./.disruptive innovations sarl/bluegriffon/q87d9o6v.default/extensions
16K ./.dooble/Dooble
4.0K ./.dooble/Histories
176K ./.dooble
4.0K ./.PlayOnLinux/wine/mono
13M ./.PlayOnLinux/wine/gecko
4.0K ./.PlayOnLinux/wine/linux-amd64
652K ./.PlayOnLinux/wine/linux-x86/1.3.19/share/wine/fonts
872K ./.PlayOnLinux/wine/linux-x86/1.3.19/share/wine這個程式會每 10 秒監控一次磁碟使用情況,直到你手動退出它。
更多詳情,我建議你參考手冊頁。
$ man watch使用 While 迴圈每隔 X 秒永遠執行一次 Linux 命令
你也可以在 While 迴圈的幫助下做到這一點。
要每 2 秒重複執行一個命令,持續不斷地運行,請執行:
$ while sleep 2 ; do uptime ; done範例輸出:
21:10:21 up 10:12, 1 user, load average: 0.83, 0.71, 0.59
21:10:23 up 10:12, 1 user, load average: 0.76, 0.70, 0.59
21:10:25 up 10:12, 1 user, load average: 0.76, 0.70, 0.59
21:10:27 up 10:12, 1 user, load average: 0.70, 0.68, 0.58
[...]結論
你現在知道如何使用 Watch 命令每隔 X 秒執行一次命令。一般來說,Watch 命令用於監控磁碟使用量和記憶體使用量。請不要將此命令與其他監控工具混淆。此命令的目的是每隔特定的秒數永久執行命令,直到你手動停止它。
相關閱讀:
- 如何在 Linux 中重複執行命令直到成功
