wheneverでcronタスク作ってみたが、cronの知識が無くて躓く
概要
業務でcronでグルグル回さなきゃならないような処理が要望として出てきたので、「wheneverでcronのタスク作れるって前読んだので楽勝だな!」とタカをくくって挑んだら意外と詰まった話。
wheneverでcrontabにタスクを追加して回してみたかった
Railsで定期実行を行う時、wheneverというgemが楽に管理できて良さげだなーと思ったので採用。
導入とか記述とか、その辺りは色々な記事が出ているので割愛します。
cron追加、からの躓き
bundle exec whenever --update-crontab
でcrontabを更新して作業完了だ!
・・・と思ったのだが。動かない。吐き出されるログファイルを見ると次のようなエラーが処理実行毎に吐き出されていた。
/Users/shiki/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bundler-1.15.1/lib/bundler/yaml_serializer.rb:55:in `split': invalid byte sequence in US-ASCII (ArgumentError) from /Users/shiki/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bundler-1.15.1/lib/bundler/yaml_serializer.rb:55:in `load' from /Users/shiki/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bundler-1.15.1/lib/bundler/settings.rb:320:in `block in load_config' from /Users/shiki/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bundler-1.15.1/lib/bundler/shared_helpers.rb:108:in `filesystem_access' from /Users/shiki/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bundler-1.15.1/lib/bundler/settings.rb:316:in `load_config' from /Users/shiki/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bundler-1.15.1/lib/bundler/settings.rb:50:in `initialize' from /Users/shiki/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bundler-1.15.1/lib/bundler.rb:247:in `new' from /Users/shiki/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bundler-1.15.1/lib/bundler.rb:247:in `settings' from /Users/shiki/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bundler-1.15.1/lib/bundler/env.rb:32:in `report' from /Users/shiki/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bundler-1.15.1/lib/bundler/friendly_errors.rb:95:in `request_issue_report_for' from /Users/shiki/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bundler-1.15.1/lib/bundler/friendly_errors.rb:45:in `log_error' from /Users/shiki/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bundler-1.15.1/lib/bundler/friendly_errors.rb:123:in `rescue in with_friendly_errors' from /Users/shiki/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bundler-1.15.1/lib/bundler/friendly_errors.rb:121:in `with_friendly_errors' from /Users/shiki/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/bundler-1.15.1/exe/bundle:27:in `<top (required)>' from /Users/shiki/.rbenv/versions/2.3.3/bin/bundle:22:in `load' from /Users/shiki/.rbenv/versions/2.3.3/bin/bundle:22:in `<main>'
対処法
cronで環境変数LANGが設定されていないため、rake taskを実行した際にUS-ASCIIとして処理しようとして落ちていた。
以下の記述をcrontabに追加することで問題なく動作するようになった。
LANG=ja_JP.UTF-8