日付と監視コマンドの出力をファイルに保存する


23

私はLinuxの初心者で、コマンドを監視してファイルにログインしようとしています。私は試した

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

ログファイルに保存されます。ただし、ログファイルにinprintable文字が含まれている場合、コマンド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でエラーが発生しているようです。しかし、私がそれをtrueに変更したとき、それは機能しました。ただし、画面の出力では2つの異なる行に時間とカウントが表示されますが、ログファイルにはカウントのみが表示されます。時間を取得してログファイルの同じ行を数える方法はありますか?
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で持っていたものを書き、ポータブルソリューションを選択しました。あなたの方がずっと簡単です。
カーク

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コマンド、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

これは、出力全体の最後にタイムスタンプがあるa 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.