Зберігайте вихідну дату та дивіться команду у файл


23

Я новачок в Linux, і я намагаюся дивитися команду і намагаюся ввійти в файл. я намагався

watch -t -n 10 "(дата '+ TIME:% 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

Відповіді:


19

Для того, щоб робити те, що ви шукаєте, простий сценарій (як вказував @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. $ (Дата +% Y% m% d), щоб створювати новий файл файлів щодня.
Кірк

Так, я це зробив. Код додали як відповідь на це питання. Дякую!
LoudKur

36

Це легко зробити також, використовуючи 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. Дуже чисто, дякую.
Wildcard

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

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.