날짜 및 감시 명령의 출력을 파일에 저장 “| wc -l)” “>> 로그 파일 그리고 같은

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

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 명령에서 이러한 종류의 출력을 얻는 방법



답변

찾고있는 것을하기 위해 간단한 스크립트 (@Ignacio가 지적한대로)가 트릭을 수행해야합니다.

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

tee대신 >>터미널에서 출력을보고 로그에서 캡처 할 수 있도록 대신 사용 합니다 .


답변

watch스크립트를 사용하지 않고도 쉽게 사용할 수 있습니다 .

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


답변

watch디스플레이로 출력하기위한 것입니다. X 초마다 명령을 실행하려면 지연 루프를 사용해야합니다.

while true ; do somecommand ; sleep 2 ; done

답변

watch는 ncurses 프로그램이며 콘솔 창 (리디렉션되지 않음)에서 실행되도록 설계되었으므로 인쇄 할 수없는 문자를 생성하는 이유입니다 (화면을 다시 그리기 위해 커서를 관리하고 이동하는 제어 문자).

date / grep 명령을 스크립트로 이동 한 다음 cronjob에서 해당 스크립트를 호출 할 수 있습니다.


답변

좋아, 스크립트에 넣고 다음 코드를 가지고 있습니다.

#!/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

답변

에서 더 나은 / 로그 된 출력을 얻으려고 할 때이 질문을 보았습니다 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

답변

다음은 전체 출력의 맨 아래에 타임 스탬프가 있는 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