cron からログ ファイルに出力をリダイレクトし、タイムスタンプを先頭に追加するにはどうすればよいですか?

cron からログ ファイルに出力をリダイレクトし、タイムスタンプを先頭に追加するにはどうすればよいですか?

私の Mac のほとんどのログには、出力メッセージの前に次のようなタイムスタンプが付いています。

Nov 14 17:55:24 - SoftRAID Driver: SoftRAID driver loaded, version 5.8.1.

私は cron で実行可能ファイルを実行しており、メールを使用する代わりに、すべての情報をログ ファイルに出力し、出力の前にある各行にタイムスタンプを追加したいと考えています。私は>>1 つのファイルに追加するために を使用しています。

これは私のcrontabです:

SHELL=/bin/bash
MAILTO=""
* 6-23 * * * /usr/local/bin/urlwatch >> /Users/john/cronjobs/urlwatch.log

urlwatch.logで取得するものは次のとおりです。

UNCHANGED: (01)urlwatch update released (https://github.com/thp/urlwatch/releases/latest)

出力を次のようにするにはどうすればいいですか:

Nov 14 17:55:24 - UNCHANGED: (01)urlwatch update released (https://github.com/thp/urlwatch/releases/latest)

ウェブ上のさまざまな提案を試してみましたが、うまくいきませんでした。テキスト ファイルに保存する方が簡単な場合は、それも機能します。

これに近いものを試してみました:

* 6-23 * * * (date && /usr/local/bin/urlwatch)  >> /Users/john/cronjobs/urlwatch.log

ログ ファイルの出力は次のようになります。

Sun Mar 15 13:35:00 CDT 2020
UNCHANGED: (03)RansomWhere? Objective-See (https://objective-see.com/products/ransomwhere.html)
UNCHANGED: (01)urlwatch update released (https://github.com/thp/urlwatch/releases/latest)
UNCHANGED: (02)urlwatch webpage (https://thp.io/2008/urlwatch/)

答え1

もしあなたが(または、自家製例えば、ts t時間stampユーティリティを使用すると、次のようなことができるはずです

/usr/local/bin/urlwatch | /path/to/ts >> /Users/john/cronjobs/urlwatch.log

( Linux システムでは/path/to/ts通常、この場所になります/usr/bin/tsが、OSX では別の場所になる場合があります)。送信元man ts:

DESCRIPTION
       ts adds a timestamp to the beginning of each line of input.

デフォルト以外の時間形式を指定したい場合は、そうすることができますが、符号は%特別な意味を持つためcronエスケープする必要があることに注意してください。たとえば、

複数の行に同じタイムスタンプが付与されていることがあります。5月原因としては、それらを生成しているプログラムが出力をバッファリングしていることが考えられます。unbufferまたはstdbufユーティリティのいずれかがシステムで利用できる場合は、5月ここで説明するように、行バッファリングを強制することが可能です。

関連情報