Сохранить вывод даты и посмотреть команду в файл

23

Я новичок в Linux, и я пытаюсь посмотреть команду и попытаться записать ее в файл. Я старался

смотреть -t -n 10 "(дата '+ ВРЕМЯ:% H:% M:% S'; ps aux | grep" pattern "| wc -l)" >> logfile

и ожидаю такой результат, как

TIME: 10:32:30    12
TIME: 10:32:40    18
TIME: 10:32:50    2

храниться в лог-файле. Тем не менее, когда в файле журнала есть непечатаемые символы в. Как я могу получить этот вид вывода из команды li

LoudKur
источник

Ответы:

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 в первой строке. Но когда я изменил это на истину, это сработало. Однако выходные данные на экране показывают время и счет в двух разных строках, а в файле журнала просто отображается только счет. Есть ли способ получить время и рассчитывать на одну и ту же строку в файле журнала?
LoudKur
Ах да, потому что команда tee работает только для ps. Я изменю свой ответ.
Кирк
Работает отлично! Спасибо. Можно ли как-нибудь добавить метку времени в файл журнала, чтобы она сохранялась в уникальных файлах?
LoudKur
Вы имеете в виду имя лог файла? Вы можете сделать что-то вроде logfile. $ (Date +% Y% m% d), чтобы создавать новый файл журнала каждый день.
Кирк
Я сделал это. Прикрепленный код как ответ на этот вопрос. Благодарность!
LoudKur
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 в арг, переданный в watch. Очень чисто, спасибо.
Подстановочный
7

watchпредназначен для вывода на дисплей. Если вы просто хотите запускать команду каждые X секунд, вам просто нужно использовать цикл задержки для этого.

while true ; do somecommand ; sleep 2 ; done
Игнасио Васкес-Абрамс
источник
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
LoudKur
источник
0

Я столкнулся с этим вопросом, когда я пытался получить лучший / зарегистрированный вывод du -sh $data_path. Я использовал шаблон "while command, do sleep", найденный здесь, но использовал какой-то сложный 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
}'

На самом деле я сделал это как вкладыш, поэтому есть точки с запятой. Но чтобы сделать его читабельным, я разбил его. Вывод выглядит так:

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каждой команде, psи date.

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
Элайджа Линн
источник