web-dev-qa-db-ja.com

bashスクリプトでログファイルにタイムスタンプを追加する

私のスクリプトは次のとおりです

if ps ax | grep -v grep | grep ./program > /dev/null
    then
        exit
    else
        echo "---------------------------------------------------" >> Debug.log
        echo "Starting program at:  $(date)" >> Debug.log
        ./program >> Debug.log 2>&1
fi
exit

Crontabを介して、このスクリプトは毎分実行されます。特定のプログラムが実行されているかどうかを確認し、実行されている場合は実行し、実行されていない場合は起動します。

./programが実行されていることが検出された場合、スクリプトがDebug.logを実行するたびにタイムスタンプを追加したいと思います。 then行の下に、次を追加しました。

echo "Time: $(date)" >> Debug.log

このコマンドは、Debug.logに何も出力しません。ただし、コマンドラインから直接機能します。なぜそうなのか、問題を解決できますか?

18
Joshua

_Debug.log_に出力していることに注意してください。そのファイルの絶対パスecho "Time: $(date)" >> /path/to/Debug.logを指定する必要があります。


一般に、ログファイルにタイムスタンプを追加する場合はいつでも使用できます。

_echo "Time: $(date). Some error info." >> /path/to/your/file.log
_

dateは_Fri Sep 9 12:18:02 CEST 2016_のようなものに展開されます。その場合、いくつかのdateフラグを使用して、より解析可能な日付にすることができます。

_$ date "+%FT%T"
2016-09-09T12:18:23
_

または、さらに良いことに ISO 8601 形式を使用します。

_$ date -Iseconds
2016-09-09T12:18:23+0200
_

すべて一緒に:

_echo "Time: $(date -Iseconds). Some error info." >> /path/to/your/file.log
_
24
fedorqui

考えられる理由は、ターミナルとshの日付のパスが異なることです。コマンドラインから直接使用する日付へのフルパスを使用してみてください。つまり、$(/bin/date)

3
Stan McGeek