나는 리눅스에 초보자이며 명령을보고 파일에 로그인하려고합니다. 나는 시도했다
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
답변
다음은 전체 출력의 맨 아래에 타임 스탬프가 있는 watch
on에 필요한 예 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