在 Linux 上, 需持續執行某種監看的指令, 或每秒執行某個程式或做某些動作, 例如:
要改大量的程式, 需要人工 review, 會做 grep "abc" *
, 然後把這些檔案一個一個檢查, 再做修改, 可能有下述的作法:
- 每改完一個檔案, 就重新再 grep 看一次, 再繼續改下一個檔案.
- 將 grep 的結果, 貼到記事本, 每改完一行就刪一行, 全部完成再 grep 一次.
除了上述做法外, 可以考慮使用 watch - execute a program periodically, showing output fullscreen.
範例:
- watch grep abc * # 預設每2秒會執行一次 "grep abc *" 的動作, 將結果顯示出來.
- watch -n 60 grep abc * # -n 秒數, 60 秒執行一次 grep 動作
- watch -d 'ls -l' # -d 會把 這次執行 跟 上次執行 不同的地方反白出來, 看出 diff
- watch -d 'ls -l | fgrep joe'
- watch -n 1 "ss -t -a | grep 11211 | awk '{print \$5}' | awk -F: '{print \$1}' | sort | uniq -c" # 要用到 awk 和 ',要把 $ 加上 \
- watch -n 1 "(date '+TIME:%H:%M:%S'; ss -t -a | grep 11211 | awk '{print \$5}' | awk -F: '{print \$1}' | sort | uniq -c) | tee -a logfile" # 監控加上靠 tee 寫 logfile
其它應用
- 用 crontab 執行程式, 時間範圍最小是以 分(minute) 為單位, 可以用程式搭配 flock / lockf 等來做更小範圍的監控.
- => 不過, 要做到這麼小範圍的(以 秒(second) 為單位), watch + screen 或許是另外一個選擇~ 🙂
註: 感謝 Mat 介紹此好工具~ 🙂
推一下, 省去寫個小loop的時間 🙂