質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

2回答

1135閲覧

wheneverを動かしたらcronのログに「Can't connect to local MySQL server through socket」

s_diff

総合スコア107

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2019/04/11 08:55

編集2019/04/11 23:56

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をつかった定期処理がうまくいかないのかが知りたいです。
なにかご教示いただけることがあれば、何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iwamot

2019/04/18 14:01

"Can't connect to local MySQL server through socket" がどこに書かれていたのか、また、その前後のログはどのようなものだったか、追記いただくことは可能でしょうか。
guest

回答2

0

schedule.rb ですが

require File.expand_path(File.dirname(__FILE__) + 'environment') set :environment, Rails.env set :output, "#{Rails.root}/log/crontab.log"

で、環境の設定と、outputする際のappルートの指定ってされてますでしょうか??

また、僕の環境では

crontab -l の出力に "bundle exec bin/rails runner -e production 〜〜

のような出力にはなっていなかったです。

wheneverの設定の際

$ bundle exec whenever --update-crontab

を実行していますか??

確認おねがいします。

投稿2019/04/23 10:31

mot93

総合スコア99

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

cronで動作しない場合、環境変数が関係していることがよくあります。
通常のコマンド実行時とcronからの実行時では使われる環境変数が異なります。
cron経由の場合にRAILS_ENVなどがしっかり設定されているか確認してみてください。

ソケットの位置がproductionとdevelopmentで異なるようですが、どちらの環境で動かしたいのでしょうか。
productionを想定しているのにcronではdevelopmentで起動したりしていないでしょうか。

投稿2019/04/11 10:37

devneko64bit

総合スコア164

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_diff

2019/04/12 00:01

ご回答ありがとうございます。 本番環境で定期処理を実行したいと思っています。 "productionを想定しているのにcronではdevelopmentで起動したりしていないでしょうか。" > 本番環境でのcrontab -l の出力に "bundle exec bin/rails runner -e production 〜〜"とあるので、production環境で起動していると思っていますが、これでは証拠として不十分でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問