首页/系统/Linux 运维命令速查/watch 周期执行命令
进程与作业69 条

watch 周期执行命令

每 N 秒重复执行命令并全屏刷新:watch -n 2 'ss -s';-d 高亮变化,盯指标/文件变化非常直观。

Linux 运维命令速查系统更新于 2026-10-13

watch 是什么

watch 按固定间隔重复执行一条命令,并把结果全屏刷新,默认间隔 2 秒。它的价值在于把「一段时间的变化」变成「一屏之内能看出来的差异」:-d 会高亮前后两次输出的不同之处,-g 则在输出发生变化时直接退出,方便脚本用它做「等到状态变化」的等待逻辑。它本质上是一个循环加清屏,开销完全取决于你让它跑什么。

基本信息

用途周期性执行命令并全屏刷新输出
语法watch [-n 秒] [-d] [-g] '命令'
常用选项-n 间隔秒数、-d 高亮差异、-g 输出变化时退出、-e 命令出错时退出、-t 关闭顶部标题
所属软件包procps-ng(多数发行版默认安装)

典型使用场景

  • 盯指标变化:连接数、内存、磁盘占用这类数字,间隔刷新比反复手敲命令省事
  • 观察日志增长:用行数变化间接判断写入速率,比 tail 滚屏更直观
  • 等待状态翻转:服务重启期间用 -g 等待健康检查返回码变化
  • 发布过程盯盘:一边切流一边观察错误率与连接数,及时决定是否回滚
  • 演示与教学:把命令的周期性效果直观展示出来

常用示例

常用示例
watch -n 2 'ss -s | grep -i tcp'                 # 每 2 秒看一次连接统计
watch -d -n 1 'df -h / && free -m | head -3'      # 高亮变化,容量与内存一起看
watch -n 5 'wc -l access.log'                     # 用行数观察日志增长速度
watch -t -n 10 'uptime'                           # 关掉标题栏,输出更干净
watch -g -n 10 'curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8080/health'   # 状态变化即退出

脚本里当作等待器用

脚本里当作等待器用
# 等待服务健康检查通过(变化即退出,配合超时保护)
timeout 120 watch -g -n 5 'curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8080/health'
# 等文件出现后继续执行
timeout 60 watch -g -n 2 'test -f /tmp/ready && echo ready'
# 注意:watch 通过 sh -c 执行命令,整条命令要用引号包住

常用选项对照

选项作用典型用途
-n 秒刷新间隔,默认 2 秒指标类 1 到 2 秒,重命令放长到 5 秒以上
-d高亮两次输出的差异在大量文本里快速定位哪一行变了
-g输出发生变化时退出脚本里等待状态翻转
-e命令返回非零时停止盯关键指标,一异常立刻停下
-t关闭顶部标题与时间输出较长、需要更多可见行时
watch 通过 shell 执行命令,所以管道、分号、通配符都能用,但整条命令必须用引号包住。不加引号时后半个命令会被 shell 提前解释,行为与预期不同。
放进 watch 的命令要轻:每 2 秒跑一次全量 du 或 find 会持续占用 IO 与 CPU,在生产机上可能自己变成故障源。先估算单次开销再决定间隔。

易错点

  • 把重命令放进 watch:周期性扫描大目录会让机器变慢,先用 time 测单次耗时
  • 命令不加引号:管道与分号会被当前 shell 提前处理,看到的输出与预期不符
  • -g 与 -d 混淆:前者是变化即退出,后者只是高亮显示,等待类脚本必须用 -g
  • 依赖 watch 做长期监控:它适合人眼观察与短时等待,长期指标采集应交给监控系统

数据来源与参考

  • man 1 watch(procps-ng 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌