

Rails のプロジェクトで Rakeタスクの実行時間を記録する時に whenever を使って

### config/schedule.rb

[code]

    job_type :rbenv_rake, %q{PATH="/opt/rbenv/bin:/usr/local/bin:$PATH"; eval "$(rbenv init -)"; cd :path && :environment_variable=:environment nice -n 10 :bundle_command rake :task --silent :output}
    
    set :output, "log/cron_foo.log"
    every "10 1 1 * *" do
       rbenv_rake "foo:update"
    end
    
[/code]

のような書き方をして、`foo:update`の中で開始時と終了直前に現在時刻を吐こうと考えているのですが、`whenever`から呼び出すときだけログに開始時刻と終了時刻を記録するもっとすっきりとした方法はありますか？

全てのRakeタスクに同様の処理を書くのはDRYではなく少し気持ちが悪かったのでなにか良い案があれば教えて下さい。

なければスクリプト内で時刻を標準出力に出す方法を使っていこうと思います。

## 環境

サーバー上ではCentOSを使用していますが、Ubuntu, CentOSどちらでも使える方法があれば嬉しいです。


CC BY-SA 3.0
2015-05-03T11:41:07.060
9793
2018-05-18T02:15:04.907
2018-05-18T02:15:04.907
754
3271
question
ruby-on-rails rake whenever
Wheneverを使ってRakeタスクの実行時間を記録する方法


もし、お使いのOSがubuntuでしたら、cronの開始時と終了時がデフォルトで`/var/log/auth.log`
に記録されます。このPIDに+1したプロセスの実行記録が syslog
に残っているはずですので、それと付き合わせれば、タスクの実行時間が分かるかと思います。ただ、auth.log と syslog
のPIDが必ず+1であると保証されているかどうかについては、資料を見つけられませんでした。

/var/log/auth.log

[code]

    May  4 00:00:00 server_name CRON[9520]: pam_unix(cron:session): session opened for user user_name
    May  4 00:00:08 server_name CRON[9520]: pam_unix(cron:session): session closed for user user_name
    
[/code]

/var/log/syslog

[code]

    May  4 00:00:01 server_name CRON[9521]: (user_name) CMD (/bin/bash -l -c 'cd /home/user_name/xxxx && RAILS_ENV=production script_name')
    
[/code]


CC BY-SA 3.0
2015-05-03T19:15:07.707
9800
2015-05-03T22:20:33.787
2015-05-03T22:20:33.787
9508
9508
9793
answer