2017-08-28 8 views
0

cronによって制御されるbashスクリプトを毎日実行しています。python(Django)の出力からいくつかの行をgrepしたい私のスラックチャンネルにはslackteeがあります。しかし、私は自分のプリントではなく、スクリプトからいくつかの警告を捕まえているだけです(std :: outとstd :: errと関係があるもの)?しかし、私はそれをデバッグすることができないようです。Cronned Djangoコマンドの出力がbashスクリプトのteeに掲載されていません

#!/bin/bash 

printf "\nStarting the products update command\n" 
DATE=`date +%Y-%m-%d` 
source mypath/bin/activate 

cd some/path/_production/_server 

./manage.py nn_products_update > logs/product_updates.log 

tail --lines=1000 logs/product_updates.log | grep INFO | grep $DATE 

だから、毎日のために、私はこれらのようなメッセージをgrepしようとしています:

[INFO][NEURAL_RECO_UPDATE][2017-08-28 22:15:04] Products update... 

をしかし、それはティーチャネルで印刷されません。さらに、ファイルは毎日上書きされ、追加されません。どうすればそれを変更できますか? tailコマンドはシェルで単独で実行したときに正常に動作します。どのように可能ですか? (申し訳ありませんが2つ、私は彼らが何らかの関連性があると信じて、ちょうど答えが見つかりません)

これはちょうどcronのエントリです。

20 20 * * * /bin/bash /path/to/server/_production/bin/runReco.sh 2>&1 | slacktee.sh -c 'my_watch' 

感謝

EDIT:

出力使うgrep -e INFO -e $DATE

grep: [INFO][NEURAL_RECO_UPDATE][2017-08-29: No such file or directory 
grep: 07:36:56]: No such file or directory 
grep: No: No such file or directory 
grep: new: No such file or directory 
grep: active: No such file or directory 
grep: products: No such file or directory 
grep: to: No such file or directory 
grep: calculate.: No such file or directory 
grep: Terminating...: No such file or directory 

答えて

0

を使用して:

#!/bin/bash 
set -euo pipefile 

これによりスクリプトのデバッグ出力が向上します 設定の詳細については、bash strict mode articleを参照してください。

リダイレクトされた出力を追加する>>ではなくリダイレ​​クトを使用しているため、ファイルは上書きされます。あなたは

2> & 1を置けばそれはおそらく生活が楽になり、さらにデバッグを支援するため

|以下のようにあなたのrunReco.shで

'my_watch' -c slacktee.sh:

tail --lines=1000 logs/product_updates.log | grep INFO | grep $DATE 2>&1 | slacktee.sh -c 'my_watch' 

シェルスクリプトで一緒に多くのコマンドを連鎖することは難しく、デバッグにそれらをなりますが。

TMPFILE=`tail --lines=1000 logs/product_updates.log` 
grep -e INFO -e $DATE $TMPFILE 2>&1 | slacktee.sh -c 'my_watch' 
+0

こんにちは:したがってテールラインを壊す

!答えをありがとう。それは作品のようなものですが、TMPFILEとgrep -eを使用すると、上の質問で編集したようなものが印刷されます。ほとんどの場合、問題は '>' vs '>>'にあり、今は動作しますが、 'DATE'によるgrepは機能しません。その中に' INFO'を含むファイル全体が表示されます。 :( –

+0

: 'grep -e INFO -e $ DATE logs/product_updates.log'は正しい出力を生成しますか?' $ TMPFILE'の出力にgrepの '-line-buffered'オプションが必要になるでしょう – fcbsd

+0

単純に '' 'で修正されました。これは今すぐうまくいきます!ありがとう! –

関連する問題