날짜 및 감시 명령의 출력을 파일에 저장


23

나는 리눅스에 초보자이며 명령을보고 파일에 로그인하려고합니다. 나는 시도했다

watch -t -n 10 "(날짜 '+ 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 명령에서 이러한 종류의 출력을 얻는 방법

답변:


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에서 가지고 있던 것을 썼다. 여기서 시계를 즉시 사용할 수 없으며 휴대용 솔루션을 선택했다. 당신은 훨씬 간단합니다.
Kirk

2
즉,에 전달 된 arg tee -a logfile 내에 파이프를 포함 시킵니다 watch. 매우 깨끗합니다. 감사합니다.
와일드 카드


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

다음은 전체 출력의 맨 아래에 타임 스탬프가 있는 watchon에 필요한 예 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.