Сохранить вывод команды date и watch в файл

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

watch-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

12
задан LoudKur
18.02.2023 19:34 Количество просмотров материала 2520
Распечатать страницу

6 ответов

для того, чтобы сделать то, что вы ищете, простой скрипт (как указал @Ignacio) должен сделать трюк:

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

Я использую tee вместо >> Так, что вы сможете увидеть выход на вашем терминале так же, как захватить его в вашем журнале.

18
отвечен Kirk 2023-02-20 03:22

Это можно легко сделать с помощью watch тоже без использования скриптов.

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

32
отвечен Kasun Gajasinghe 2023-02-20 05:39

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

while true ; do somecommand ; sleep 2 ; done
7
отвечен Ignacio Vazquez-Abrams 2023-02-20 07:56

watch-это программа ncurses и предназначена для запуска в окне консоли (не перенаправляется), поэтому она создает кучу непечатаемых символов (это управляющие символы, которые управляют и перемещают курсор для перерисовки экрана).

вы можете попробовать переместить команды date / grep в скрипт, а затем вызвать этот скрипт из cronjob.

5
отвечен Darth Android 2023-02-20 10:13

Ok, поэтому я помещаю его в скрипт и имею следующий код:

#!/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
3
отвечен LoudKur 2023-02-20 12:30

я столкнулся с этим вопросом, когда пытался получить лучший / зарегистрированный вывод из du -sh $data_path. Я использовал шаблон "while command, do sleep", найденный здесь, но использовал какой-то сложный AWK, чтобы дать выход, который я хотел.

while du -sh $data_path; do sleep 1; done | awk '
 != size {
    size=;
    path=;
    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
отвечен Bruno Bronosky 2023-02-20 14:47

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

command-line
date
linux
unix
watch
Вверх