将 date 和 watch 命令的输出存储到文件中

Lou*_*Kur 34 linux unix date command-line watch

我是 linux 的新手,我正在尝试查看命令并尝试将其登录到文件中。我试过

watch -t -n 10 "(date '+TIME:%H:%M:%S' ; ps aux | grep "pattern" | wc -l)" >> 日志文件

我期待这样的结果

TIME: 10:32:30    12
TIME: 10:32:40    18
TIME: 10:32:50    2
Run Code Online (Sandbox Code Playgroud)

存储在日志文件中。但是,当日志文件中有不可打印的字符时,我如何从命令 li 中获得这种输出

Kas*_*ghe 48

这也可以很容易地完成,watch而无需使用任何脚本。

watch -t -n 10 "(date '+TIME:%H:%M:%S' ; ps aux | grep "pattern" | wc -l) | tee -a logfile"

  • 换句话说,在传递给 `watch` 的 arg 中包含一个到 `tee -a logfile` 的管道。很干净,谢谢。 (5认同)

Kir*_*irk 28

为了做你正在寻找的事情,一个简单的脚本(如@Ignacio 指出的)应该可以解决问题:

while true
do
    echo "$(date '+TIME:%H:%M:%S') $(ps aux | grep "pattern" | wc -l)" | tee -a logfile
    sleep 2
done
Run Code Online (Sandbox Code Playgroud)

我使用tee代替,>>以便您可以在终端上看到输出并在日志中捕获它。


Ign*_*ams 10

watch用于输出到显示器。如果您只是想每 X 秒运行一次命令,那么您应该为此使用延迟循环。

while true ; do somecommand ; sleep 2 ; done
Run Code Online (Sandbox Code Playgroud)


Dar*_*oid 5

watch 是一个 ncurses 程序,旨在在控制台窗口中运行(未重定向),这就是为什么它会创建一堆不可打印的字符(这些是管理和移动光标以重绘屏幕的控制字符)。

您可以尝试将 date / grep 命令移动到脚本中,然后从 cronjob 调用该脚本。