17
6

More than 1 year has passed since last update.

whenever gem mac cron log どこ ? - wheneverでcronを正常作動させるまでの備忘録 -

Last updated at Posted at 2022-08-16

- wheneverでcronを正常作動させるまでの備忘録 -

執筆経緯

whenever(github)

上記のgemを導入してmacbookローカル上で定期実行を試みたが、全くうまくいかず

・ログどこにあるの???
・何のエラー起きてるの???

となり、想定した動作をするまでにかなり時間を費やしたので
同じ症状の方が短時間で解決できるよう、解決方法と原因を周知するために執筆する。

私の環境

PC:MacBook Air (M1, 2020)
rails(アプリ側): 6.1.6.1
rails(ターミナル標準):5.2.8.1

テーマと扱わない事項

本記事のテーマは、macでwheneverを使用した際にcronを正常動作させるために
・”schedule.rb”にどのように記載すべきか
・記載内容の意味
をテーマに解説していきます。

wheneverの具体的な使い方については解説していません

結論

schedule.rb
set :output, "#{Rails.root}/log/cron.log"
#railsアプリフォルダ内の./log/cron.logにログが出力されるようにする記述

require File.expand_path(File.dirname(__FILE__) + '/environment')
set :path_env, ENV['PATH']
rails_env = ENV['RAILS_ENV'] || :development
set :environment, rails_env
#railsアプリ内の実行環境を変数に代入している

job_type :runner, "cd :path && PATH=':path_env' bin/rails runner -e :environment ':task' :output"
#railsアプリ上の実行環境と同条件になるよう規定している
#:outputで事前にsetしたパスにログの出力先を設定

とりあえず、schedule.rb内に上記の記述を追記すればOK

補足

上記を追記してもうまくいかない方は
少なからず、ログは取れるようになったはずなのでログのエラー内容を見れば対処できるようになってます!

原因

macのcronログどこ?

最近のmac_bookのcronはログ出力先を指定しないとログを出力しない設定になっているようです。。。

そして、

schedule.rb
every '*/1 * * * *' do
  runner "Movie.publish_check"
end

のみしか記述せずにwhenever ==> cronに上げてしまうと
ログ出力先を指定してないことになり、どこにもログが吐き出されなくなります。。。

ターミナル(cron)とアプリ上で実行環境が違くなる

エラーログ
From: motoya@murakamimotoyas-MacBook-Air.local (Cron Daemon)
To: motoya@murakamimotoyas-MacBook-Air.local
Subject: Cron <motoya@murakamimotoyas-MacBook-Air> /bin/zsh -l -c 'cd /Users/motoya/study/whenevertest && bundle exec bin/rails runner -e development '\''Movie.publish_check'\'''
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=motoya>
X-Cron-Env: <USER=motoya>
Message-Id: <20220806024702.83064923436@murakamimotoyas-MacBook-Air.local>
Date: Sat,  6 Aug 2022 11:47:01 +0900 (JST)

/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe': Could not find 'bundler' (2.2.33) required by your /Users/motoya/study/whenevertest/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:2.2.33`
	from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems.rb:302:in `activate_bin_path'
	from /usr/bin/bundle:23:in `<main>'

私の場合、上記のようなログがcron.logに残っていたのですが
先に提示した通り私の環境では

railsの標準バージョン:5.2.8.1
wheneverを実行するアプリのrailsバージョン:6.1.6.1

と差異が発生しており
cron側で特に何も設定しないと
ターミナル標準バージョンのrailsを使用して実行してしまうため
エラーが発生しておりました。。。

参考

https://qiita.com/uot/questions/a283becff015139ac760
上記の解答を参考に問題を解決させて頂きました!

最後に

これを機にcronのlog出力先は必ず指定することを忘れないようにしていきます!
間違ってる箇所等ありましたらお気軽に御指摘頂けますと幸いです!!!

17
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
6