私のスクリプトは次のとおりです
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に何も出力しません。ただし、コマンドラインから直接機能します。なぜそうなのか、問題を解決できますか?
_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
_
考えられる理由は、ターミナルとshの日付のパスが異なることです。コマンドラインから直接使用する日付へのフルパスを使用してみてください。つまり、$(/bin/date)