如何将“watch”命令的输出保存到文件中

30

我希望每60秒运行一次命令,并将输出保存到日志文件中。我知道可以使用以下方式在控制台上打印:

watch -n 60 <mycommand>

但是如果我想将它保存到文件中并同时打印到控制台怎么办?


5
已经在这里解决了:http://superuser.com/questions/297283/store-the-output-of-date-and-watch-command-to-a-file - fedorqui
使用tee命令:http://linux.101hacks.com/unix/tee-command-examples/ - Deepthought
2个回答

39

Watch被设计为在控制台窗口中运行。将其输出打印到文件中是不方便的,因为存在大量无法打印的格式字符。

如果确切的60秒不是问题,您可以尝试在没有watch的情况下执行此操作:

 while <some condition>
 do
     <mycommand> 2>&1 | tee -a /path/to/logfile
     sleep 60
 done

这将输出保存到日志文件中并同时显示在控制台上。


您可以将该命令作为后台进程运行,以便它每60秒启动一次,而不是在上一次完成后的60秒后再启动。 - chepner
没错,你说得对。你也可以像这样将其添加到你的crontab中: “* * * * * /path/to/mycommand 2>&1 | /path/to/tee -a /path/to/logfile” 但是如果你想要比每60秒运行一次更频繁地运行它,这种方法就不起作用了。 - sweetkorn
1
为什么文件的输出对我来说仍然看起来很奇怪?它包含了这样的内容[24;80H[1;74H20[24;80H[1;75H1[24;80H[1;75H2[24;80H - Freedo

5

试一下:

while true
do
    watch -n 60 <command> 2>&1 | tee -a logfile
done

我使用tee命令,这样你就可以看到输出并将其捕获到日志中。


10
由于生成的文件中包含终端模拟器控制代码,所以无法得到可用输出。 - Jade
2
有没有办法生成可用的输出?不要包含终端相关的内容。 - Freedo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接