AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 767519
Accepted
futurewave
futurewave
Asked: 2024-01-23 01:35:46 +0800 CST2024-01-23 01:35:46 +0800 CST 2024-01-23 01:35:46 +0800 CST

监视命令:仅定期更新,而不是基于事件?(示例:每 2 秒 - 每次保存文件 x 时)

  • 772

我想要什么:使用 watch 命令运行命令 y,并且仅在命令 y 的输出发生更改时才更新 watch 命令。

想象一个带有 3 行 echo 输出的 bash 脚本

Hello world!
Hello universe!
Aloha multiverse!

我希望监视 bash 脚本,但只有当所述输出由于编辑脚本并随后保存而发生更改(因此修改日期)时,才应该发生更新。

我担心,像往常一样,默认情况下每 2 秒更新一次的 watch 命令,每天运行多个小时时,会过快地缩短存储磁盘的使用寿命。我的意思是,想象一下该命令会产生多少读/写操作。我觉得这样太浪费了。如果 watch 命令只是休眠,保存监视命令的行为会唤醒 watch,再次运行脚本,然后再次休眠,那就更好了。

我的意思是:自动相当于我们都知道的手工操作:1. 编写脚本,2. 然后保存它,3. 然后再次执行它以查看保存的更改是否按预期运行 - 重复。我的意思是为了看到变化,我们不会每 2 秒执行一次命令,而是基于事件只执行一次。

在编写脚本和执行脚本之间进行自动化的繁琐的不断切换的代价是否是不可避免的不断的间隔更新会因读写进程的过度增长而耗尽存储磁盘的寿命?

折衷方案可能是通过 -n 选项来延长间隔时间,例如每 30 秒一次,但 watch 命令无法以某种方式做得更好吗?

我的意思是,我已经考虑过,一旦文件发生更改,就可以让 watch 通过 -g 选项退出,但这不会改变 watch 上的任何内容,导致每 2 秒或其他间隔进行一次读取操作,直到发生更改,保持存储磁盘一直处于繁忙状态。

while 循环也有同样的问题,不是吗?或者这可能是解决方案:用 while 循环重建 watch 命令,使其真正基于事件(?),从而在开发脚本时最大限度地减少读写操作量?

这是关于效率、极简主义、尽可能节省资源。

watch
  • 1 1 个回答
  • 43 Views

1 个回答

  • Voted
  1. Best Answer
    zwets
    2024-01-23T02:00:27+08:002024-01-23T02:00:27+08:00

    与其使用watch,不如使用inotifywait。这是针对 Linux inode 通知内核子系统构建的,该子系统提供基于事件的 API 来观察文件系统更改。

    在 Ubuntu 上,该inotify-tools软件包提供了inotifywait以及各种其他可对文件、目录或整个文件系统进行操作的小工具。

    所以,你可以这样做(在 bash 中):

    while true; do 
        diff <(./watchee) <(inotifywait -qqe modify ./watchee; ./watchee)
    done
    

    或者,使用watch(注意带引号的分号):

    watch inotifywait -qqe modify ./watchee';' ./watchee
    

    并希望该手表不会产生一堆命令来赶上错过的时间间隔 - 正如BUGS其手册页中的部分所暗示的那样,在某些情况下可能会发生这种情况。

    • 1

相关问题

  • 使用 watch 或替代方式一次查看多个命令

  • watch-command-alias-expansion 并且需要使用引号

  • 如何中断watch命令?

  • 使 watch 重新评估命令

  • 使用 watch 命令后停止观看特定程序的输出?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve