回答:
探していることを行うには、(@ Ignacioが指摘したように)簡単なスクリプトでトリックを行う必要があります。
while true
do
echo "$(date '+TIME:%H:%M:%S') $(ps aux | grep "pattern" | wc -l)" | tee -a logfile
sleep 2
done
tee
代わりに使用して>>
、出力をログに記録するだけでなく、端末で表示できるようにします。
ps
です。答えを修正します。
watch
ディスプレイへの出力用です。X秒ごとにコマンドを実行するだけの場合は、そのために遅延ループを使用する必要があります。
while true ; do somecommand ; sleep 2 ; done
watchはncursesプログラムであり、コンソールウィンドウ(リダイレクトされない)で実行されるように設計されているため、多くの印刷できない文字が作成されます(これらは、画面を再描画するためにカーソルを管理および移動する制御文字です)。
date / grepコマンドをスクリプトに移動してから、cronjobからそのスクリプトを呼び出すことができます。
からより良い/ログ出力を取得しようとしていたときにこの質問に出くわしました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
これは、出力全体の最後にタイムスタンプがある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