xurokawa-lab

雑多な雑記。お仕事ではRailsとかAndroidとかKotlinとか。

wheneverでcronタスク作ってみたが、cronの知識が無くて躓く

概要

業務でcronでグルグル回さなきゃならないような処理が要望として出てきたので、「wheneverでcronのタスク作れるって前読んだので楽勝だな!」とタカをくくって挑んだら意外と詰まった話。

wheneverでcrontabにタスクを追加して回してみたかった

Railsで定期実行を行う時、wheneverというgemが楽に管理できて良さげだなーと思ったので採用。

github.com

導入とか記述とか、その辺りは色々な記事が出ているので割愛します。

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