gemのwheneverを使って、本番環境で定期処理を実装しようと思っています。
本番環境で
$ crontab -l
を実行すると、
Begin Whenever generated tasks for: myapp at: 2019-04-11 07:58:03 +0000
0 17 * * 4 /bin/bash -l -c 'cd /var/www/rails/myapp/releases/20190411075717 && bundle exec bin/rails runner -e production '''ProductUpMailer.inform_product_upload_once_a_week.deliver_now''' >> log/crontab.log 2>&1'
End Whenever generated tasks for: myapp at: 2019-04-11 07:58:03 +0000
と出力され、cronに問題なく登録されているようです。
しかし実際にcronを設定した時刻になってもタスクが実行されません。
###環境
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
Rails 4.2.6
whenever (0.10.0)
AWS EC2
###実装部分
ruby
1# Gemfile 2group :production, :staging do 3 gem 'whenever', require: false 4 gem 'unicorn' 5 gem 'unicorn-worker-killer' 6 gem 'aws-sdk', '~> 3' 7end
ruby
1# schedule.rb 2set :output, 'log/crontab.log' 3 4every :thursday, :at => '6:00 pm' do 5 runner "ProductUpMailer.inform_product_upload_once_a_week.deliver_now" 6end
ruby
1# config/database.yml 2default: &default 3 adapter: mysql2 4 encoding: utf8 5 pool: 5 6 username: root 7 password: 8 9development: 10 <<: *default 11 database: myapp_development 12 socket: /tmp/mysql.sock 13 14staging: 15 <<: *default 16 database: myapp_staging 17 username: myapp 18 password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %> 19 socket: /var/lib/mysql/mysql.sock 20 21production: 22 <<: *default 23 database: myapp_production 24 username: myapp 25 password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %> 26 socket: /var/lib/mysql/mysql.sock 27
ruby
1# Capfile 2require "capistrano/setup" 3require "capistrano/deploy" 4require "capistrano/scm/git" 5install_plugin Capistrano::SCM::Git 6require "capistrano/bundler" 7require "capistrano/rails" 8require "capistrano/rails/assets" 9require "capistrano/rails/migrations" 10require "capistrano/rbenv" 11require "capistrano3/unicorn" 12require "capistrano/sidekiq" 13require "capistrano/upload-config" 14require 'capistrano/rails/console' 15require "whenever/capistrano" 16 17Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
###試したこと
以下のことを本場環境で確認しました。
・mysqlのソケットを調べましたが、問題ありませんでした
・コンソールで"ProductUpMailer.inform_product_upload_once_a_week.deliver_now"をたたくと、
メールは問題なく送られます。
・log/crontab.logを確認したところ、何も書かれてなく空のファイルでした。
・カレントディレクトリを/var/libにして"sudo chown mysql:mysql /tmp"コマンドを叩きましたが、変化はありません。
###実現したいこと
なぜ本番環境でwheneverをつかった定期処理がうまくいかないのかが知りたいです。
なにかご教示いただけることがあれば、何卒よろしくお願いいたします。