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


23

我是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

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

Answers:


20

为了执行您想要的操作,一个简单的脚本(如@Ignacio所指出的)应该可以解决问题:

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

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


我似乎在第一行中出现错误1。但是当我将其更改为true时,它起作用了。但是,屏幕上的输出在两行显示时间和计数,但是日志文件仅显示计数。有什么方法可以获取时间并在日志文件的同一行上计数?
LoudKur 2011年

好的,因为tee命令仅针对运行ps。我将修改我的答案。
柯克(Kirk)

完美的作品!谢谢。有什么办法可以将时间戳记添加到日志文件中,以便将其存储在唯一的文件中?
LoudKur 2011年

您是指日志文件名吗?您可以执行logfile。$(date +%Y%m%d)之类的操作来每天创建一个新的日志文件。
柯克

是的,我做到了。附加代码作为对此问题的答案。谢谢!
LoudKur 2011年

37

watch无需使用任何脚本,也可以轻松完成此操作。

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


1
正确。我写了我在Mac上无法使用的手表,然后选择了便携式解决方案。您的要简单得多。
柯克

2
换句话说,tee -a logfile 传递给的arg中包含一个管道watch。很干净,谢谢。
2015年


5

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

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


3

好的,所以我将其放在脚本中并具有以下代码:

#!/bin/sh
NOW=$(date '+%Y%m%d%H%M%S')
LOGFILE="log.$NOW"

while true
do
    echo $(date '+[TIME: %H:%M:%S]   Output: ' ; ps aux | grep "pattern" | wc -l ) | tee -a $LOGFILE
    sleep 2
done

0

当我尝试从中获得更好的/记录的输出时,遇到了这个问题du -sh $data_path。我使用了此处找到的“ while命令,请执行睡眠”模式,但使用了一些复杂的AWK来提供所需的输出。

while du -sh $data_path; do sleep 1; done | awk '
$1 != size {
    size=$1;
    path=$2;
    time=systime();
    seconds=time-prevtime;
    if(seconds < 1000000000){
        seconds=seconds" seconds"
    }else{
        seconds=""
    }
    print size, path, strftime("%m/%d/%Y@%H:%M:%S", time), seconds; 
    prevtime=time
}'

实际上,我是作为oneliner这样做的,这就是为什么要使用分号的原因。但是为了使其可读性,我将其发布。输出如下:

502G /var/lib/cassandra/dump/ 05/22/2018@04:46:17
503G /var/lib/cassandra/dump/ 05/22/2018@04:46:59 42 seconds
504G /var/lib/cassandra/dump/ 05/22/2018@04:47:57 58 seconds
505G /var/lib/cassandra/dump/ 05/22/2018@04:48:55 58 seconds
506G /var/lib/cassandra/dump/ 05/22/2018@04:49:53 58 seconds
507G /var/lib/cassandra/dump/ 05/22/2018@04:50:50 57 seconds
508G /var/lib/cassandra/dump/ 05/22/2018@04:51:46 56 seconds
509G /var/lib/cassandra/dump/ 05/22/2018@04:52:44 58 seconds
510G /var/lib/cassandra/dump/ 05/22/2018@04:53:41 57 seconds

0

这里是我只需要一个示例watch上的ps axf与在整个输出的底部的时间戳。我正在监视Apache何时失败。tee对于每个命令,我必须使用管道输送到psdate

watch 'ps axf | grep --line-buffered "[a]pache2"| tee --append logfile-apache-issue.log; date '+TIME:%H:%M:%S' | tee --append logfile-apache-issue.log'

tail --follow logfile-apache-issue.log在结果文件上输出的示例。

29862 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29863 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29864 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29865 ?        S      0:00          \_ /usr/sbin/apache2 -k start
26635 pts/2    S+     0:00  |       \_ tail -n 1000 -f /var/log/apache2/error.log
TIME:02:21:13
13622 ?        SN     0:33      \_ /usr/sbin/apache2 -k start
25038 ?        Ss     0:01      \_ /usr/sbin/apache2 -k start
29859 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29860 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29861 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29862 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29863 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29864 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29865 ?        S      0:00          \_ /usr/sbin/apache2 -k start
26635 pts/2    S+     0:00  |       \_ tail -n 1000 -f /var/log/apache2/error.log
TIME:02:21:15
13622 ?        SN     0:33      \_ /usr/sbin/apache2 -k start
25038 ?        Ss     0:01      \_ /usr/sbin/apache2 -k start
29859 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29860 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29861 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29862 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29863 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29864 ?        S      0:00          \_ /usr/sbin/apache2 -k start
29865 ?        S      0:00          \_ /usr/sbin/apache2 -k start
26635 pts/2    S+     0:00  |       \_ tail -n 1000 -f /var/log/apache2/error.log
TIME:02:21:16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.