uot
@uot (uo yu)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

wheneverを使用して、定期的にユーザーにメールを送りたい

解決したいこと

Ruby on RailsにてEC2にデプロイをしました。
wheneverを使用して、定期的にユーザーにメールを送りたいです。
※wheneverの挙動確認の為、1分毎にしております
ご存じの方がいましたら、ご教示ください。

【現状の挙動確認】

・ローカルでのAction Mailerは挙動確認済
・ローカルでのwheneverは挙動確認済
・EC2にて、Action Mailerは挙動確認済

発生している問題・エラー

schedule.rbに記述してる指定時間が本番環境だと反映されない。

該当するソースコード

schedule.rb
require File.expand_path(File.dirname(__FILE__) + '/environment')
set :path_env, ENV['PATH']
job_type :runner, "cd :path && PATH=':path_env' bin/rails runner -e :environment ':task' :output"
job_type :rake,   "cd :path && PATH=':path_env' :environment_variable=:environment bundle exec rake :task --silent :output"
rails_env = ENV['RAILS_ENV'] || :production
set :output, "#{Rails.root}/log/cron.log"
set :environment, rails_env

# 毎月1日の9:30に起動(月1)
every 1.minutes do
  rake "thanxmailer_a:thanxmailer_a" 
end

# 毎月1日の9:30に起動(月2)
every '30 16 31 * *' do
  rake "thanxmailer_b:thanxmailer_b" 
end

# 毎月15日の9:30に起動(月2)
every '30 9 15 * *' do
  rake "thanxmailer_c:thanxmailer_c" 
end

ローカル環境には反映されいる

# 設定内容が問題ないか確認
ローカルアプリケーションにて % bundle exec whenever

* * * * * /bin/bash -l -c 'cd /Users/・・・

30 16 31 * * /bin/bash -l -c 'cd /Users/・・・

30 9 15 * * /bin/bash -l -c 'cd /Users/・・・

本番環境には反映されていない

# 設定内容が問題ないか確認
[ec2-user@本番環境アプリケーションにて]$ RAILS_ENV=production bundle exec whenever

30 9 1 * * /bin/bash -l -c 'cd /var/www/subscription && PATH='\''/home/ec2-user/・・・

30 9 1 * * /bin/bash -l -c 'cd /var/www/subscription && PATH='\''/home/ec2-user/・・・

30 9 15 * * /bin/bash -l -c 'cd /var/www/subscription && PATH='\''/home/ec2-user・・・

自分で試したこと

【EC2 whenever】などで調べて色々修正しましたが反映されず
これが実装できればEC2にてwheneverで、定期的にユーザーにメールを送る機能ができるのかな、、と思っております。

0

17Answer

こちらの相違箇所が下記4点がになります。

  • XDG_SESSION_ID
  • SSH_CLIENT
  • SSH_TTY
  • SSH_CONNECTION

ユーザー名、PATHなんかは全く一緒なら、EC2側で問題のメール送信のコマンドはどういうエラーが出ているのかによると思います。

:productionの記述をすれば本番環境に反映されている認識でした。

本番環境に反映辺りはcapistranoの知識が必要と思いますが、それ以前にcrontab、whenever等々の知識が不足しているので、全体像が曇ってて見えないのではないかと思います。
ローカルを編集してcapistranoの実行ができていないとか?

ec2(リモート)側の、『schedule.rb』が存在する形でしょうか?

capistranoは使ったことがないですが、無いとwheneverが実行できないはずなのであると思います。

1Like

@github0013@github

丁寧な回答本当にありがとうございます!
頂いた回答をもとに

# Begin Whenever generated tasks for: アプリ名 at: 2021-09-01 02:06:13 +0000
# こちらは、開発環境にて
#bundle exec whenever --update-crontab
# を実行してできたものでした

# Begin Whenever generated tasks for: /var/www/アプリ名/config/schedule.rb at: 2021-08-31 07:36:20 +0000
# こちらは、本番環境にて
#RAILS_ENV=production bundle exec whenever --update-crontab
# を実行してできたものでした

本番環境を動かしたいので

crontab -eを実行。
中身を削除して編集

* * * * * printenv >> /home/自分のユーザー名/my_crontab.log
* * * * * whoami >> /home/自分のユーザー名/my_crontab.log

下記を反映させるために

#schedule.rb

require File.expand_path(File.dirname(__FILE__) + '/environment')
set :path_env, ENV['PATH']
job_type :runner, "cd :path && PATH=':path_env' bin/rails runner -e :environment ':task' :output"
job_type :rake,   "cd :path && PATH=':path_env' :environment_variable=:environment bundle exec rake :task --silent :output"
rails_env = ENV['RAILS_ENV'] || :production
set :output, "#{Rails.root}/log/cron.log"
set :environment, rails_env

# 毎月1日の9:30に起動(月1)
every 1.minutes do
  rake "thanxmailer_a:thanxmailer_a" 
end

# 毎月1日の9:30に起動(月2)
every '40 10 1 * *' do
  rake "thanxmailer_b:thanxmailer_b" 
end

# 毎月15日の9:30に起動(月2)
every '30 9 15 * *' do
  rake "thanxmailer_c:thanxmailer_c" 
end

本番環境にて

RAILS_ENV=production bundle exec whenever --update-crontab

RAILS_ENV=production crontab -e
で確認をすると

* * * * * printenv >> /home/ec2-user/my_crontab.log
* * * * * whoami >> /home/ec2-user/my_crontab.log

# Begin Whenever generated tasks for: /var/www/subscription/config/schedule.rb at: 2021-09-01 06:23:49 +0000
30 9 1 * * /bin/bash -l -c 'cd /var/www/subscription && PATH='\''/home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/bin:/home/ec2-user/.rbenv/versions/2.6.5/bin:/home/ec2-user/.rbenv/libexec:/home/ec2-user/.rbenv/plugins/ruby-build/bin:/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin'\'' RAILS_ENV=production bundle exec rake thanxmailer_a:thanxmailer_a --silent >> /var/www/subscription/log/cron.log 2>&1'

30 9 1 * * /bin/bash -l -c 'cd /var/www/subscription && PATH='\''/home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/bin:/home/ec2-user/.rbenv/versions/2.6.5/bin:/home/ec2-user/.rbenv/libexec:/home/ec2-user/.rbenv/plugins/ruby-build/bin:/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin'\'' RAILS_ENV=production bundle exec rake thanxmailer_b:thanxmailer_b --silent >> /var/www/subscription/log/cron.log 2>&1'

30 9 15 * * /bin/bash -l -c 'cd /var/www/subscription && PATH='\''/home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/bin:/home/ec2-user/.rbenv/versions/2.6.5/bin:/home/ec2-user/.rbenv/libexec:/home/ec2-user/.rbenv/plugins/ruby-build/bin:/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin'\'' RAILS_ENV=production bundle exec rake thanxmailer_c:thanxmailer_c --silent >> /var/www/subscription/log/cron.log 2>&1'

# End Whenever generated tasks for: /var/www/subscription/config/schedule.rb at: 2021-09-01 06:23:49 +0000

schedule.rbが反映されていないです。
上記は手動で編集するしかないのでしょうか??
1分ごとに送信で確かめて、問題なければ、時間を記述しようかなと思うのですが

※crontabが現状自分でかけないと思います。調べながら理解していってる形です。

0Like

@github0013@github

vi config/schedule.rbから指定の時間を修正しまして、

bundle exec whenever --update-crontab

bundle exec whenever --update-crontab アプリ名

bundle exec whenever --update-crontab アプリ名_production 

など入れていたら、メールが一通きました。
しかし、気づいたのが数分たってしまい、どのやり方で成功したかわからずまだ苦戦してます。
近づいてきました!

0Like
$ printenv

$ vi /home/ec2-user/my_crontab.log

こちらの相違箇所が下記4点がになります。
・XDG_SESSION_ID
・SSH_CLIENT
・SSH_TTY
・SSH_CONNECTION

『$ vi /home/ec2-user/my_crontab.log』に関しては
XDG_RUNTIME_DIR以降は、すごい情報がありました。

##自分のパソコン(ローカル)とec2(リモート)とごちゃごちゃになっていません?

私の認識が、自分のパソコン(ローカル)上の『schedule.rb』にて,:productionの記述をすれば本番環境に反映されている認識でした。

...
rails_env = ENV['RAILS_ENV'] || :production

ec2(リモート)側の、『schedule.rb』が存在する形でしょうか?
今から自分も調べます。

0Like

でました!(scheduleの時間は反映されておりません)

多分ですけど、schedule.rbが複数ありませんか?
もしくは見ているschedule.rbが実行しているschedule.rbと違うとしか考えられない。

自分のパソコン(ローカル)とec2(リモート)とごちゃごちゃになっていません?

0Like

そうですか、capistranoまで使っていたのである程度の知識があると思っていました。
かなり初歩的ですが

$ vi /home/ec2-user/my_crontab.log
$ nano /home/ec2-user/my_crontab.log
$ cat /home/ec2-user/my_crontab.log
$ less /home/ec2-user/my_crontab.log
$ more /home/ec2-user/my_crontab.log
$ tail -f /home/ec2-user/my_crontab.log

色々ファイルの中身を見る方法はあります。

0Like

頂きました回答ですが、このような形になりました。

##◇# Begin Whenever generated tasksで囲まれる内容は全部消えますか?
消えました!

##◇# Begin Whenever generated tasks for: アプリ名_productionとでますか?
でました!(scheduleの時間は反映されておりません)

##◇バージョンは何ですか?

*** LOCAL GEMS ***

whenever (1.0.0)
    Author: Javan Makhmali
    Homepage: https://github.com/javan/whenever
    License: MIT
    Installed at: /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0

    Cron jobs in ruby.
0Like

@github0013@github

ご回答ありがとうございます。
現在調べながら、行っております。

その内容で、調べても自分で方法がわからない点があります。

* * * * * printenv >> /home/ec2-user/my_crontab.log
* * * * * whoami >> /home/ec2-user/my_crontab.log

の中身の見方がわかりません。
ec2-userにて『ls』を行うと、my_crontab.logは確認ができております。

0Like

RAILS_ENV=production crontab -e
で確認をすると

crontabとrailsとwheneverと頭の中でごちゃごちゃになってる気がします。

  • crontab
  • whenever
  • rails

それぞれ別物で、crontabはOSレベルのスケジューラーで、wheneverはcrontabを楽に管理するためのgemで、railsはrailsです。まずはcrontabを自分で書けるように調べて理解したほうが良いです。

  # これはrailsのenv、crontabに渡しても意味がない
$ RAILS_ENV=production crontab -e
                       # OSのスケジューラー

あと-eは編集モードなので下手に書き換えることがないように

$ crontab -l

で普通は表示のみを行います。

* * * * * printenv >> /home/ec2-user/my_crontab.log
* * * * * whoami >> /home/ec2-user/my_crontab.log

が今crontabに書かれているとすれば、/home/ec2-user/my_crontab.logにファイルが出来ていますよね?この内容と

$ printenv
$ whoami

は同じですか?

$ RAILS_ENV=production bundle exec whenever --update-crontab

schedule.rb
...
rails_env = ENV['RAILS_ENV'] || :production

とあるので、

$ bundle exec whenever --update-crontab

これで既にproductionになると思います。

$ bundle exec whenever -c
$ crontab -l

とやって# Begin Whenever generated tasksで囲まれる内容は全部消えますか?
消えたなら

$ bundle exec whenever -i アプリ名_production
$ crontab -l

とやって# Begin Whenever generated tasks for: アプリ名_productionとでますか?

$ gem list -d whenever

とやってバージョンは何ですか?

0Like

要は

every 1.minutes do
  rake "thanxmailer_a:thanxmailer_a" 
end

をしても

* * * * * /bin/bash -l -c 'cd /Users/・・・

がcrontabに入ってないってことですよね?

もしかしてwhenever -i ...実行ユーザーが違ってるから違うcrontabに入ってるとか?

$ crontab -l

としてどういう表示になりますか?

0Like
whenever --help                                                                                                                         [17/17]
Usage: whenever [options]
    -i [identifier],                 Default: full path to schedule.rb file
$ whenever --update-crontab # $ whenever -i 同じ意味

[identifier] は Default: full path to schedule.rb file

# Begin Whenever generated tasks for: アプリ名 at: 2021-09-01 02:06:13 +0000
# こっちは多分
# whenever -i アプリ名
# を実行してできた

# Begin Whenever generated tasks for: /var/www/アプリ名/config/schedule.rb at: 2021-08-31 07:36:20 +0000
# こっちは多分
# whenever -i
# を実行してできた(デフォルトのpath)

要らない方をwhenever -c ...とすればcrontabから消せる。(crontab -eで自分で消しても問題ない)

そもそもcrontabは自分で書けますか?
書けないのなら、一度crontabを書けるように調べたほうがwheneverが結局何をしているのか分かると思います。

その上で(~は良くないので変えました ユーザーが書き込める場所を指定してください /home/ec2-user/my_crontab.logとか)

* * * * * printenv >> /home/自分のユーザー名/my_crontab.log
* * * * * whoami >> /home/自分のユーザー名/my_crontab.log

これがどういう意味なのか分かると思います。

0Like

@github0013@github

ご返信頂きありがとうございます。
頂いた質問で、理解できてない箇所がありました。
そちらはGoogleで調べまして、お答えします。また理解してる内容が違いましたら、ご指摘ください。

##◇Begin Whenever generated tasks for:が2箇所ある意味
こちらは、crontabが上書きされて反映されてしまっているということでしょうか??

##このコマンドは本番環境で本当に動きますか?(どのユーザーで?)
いえ、本番環境では動いておりません。

下記、$ printenv・$ whoami実行後の値(一部を抜粋)です。

[ec2-user@ip-・・・・ アプリ名]$ printenv
TERM=xterm-256color
SHELL=/bin/bash
HISTSIZE=1000
OLDPWD=/home/ec2-user
SSH_TTY=/dev/pts/0
USER=ec2-user
LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:
MAIL=/var/spool/mail/ec2-user
PATH=/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
PWD=/var/www/アプリ名
LANG=ja_JP.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
HOME=/home/ec2-user
LOGNAME=ec2-user
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/1000
_=/usr/bin/printenv
[ec2-user@ip-・・・・・ アプリ名]$ whoami
ec2-user

##cronはどのユーザーで、どういう環境変数で動いていますか?
localという文字があるので、ローカルでしか反映されていないかもしれません。。。

# Begin Whenever generated tasks for: subscription at: 2021-09-01 02:06:13 +0000
* * * * * /bin/bash -l -c 'cd /var/www/subscription/releases/20210901020531 && PATH='\''/var/www/subscription/shared/bundle/ruby/2.6.0/bin:/home/ec2-user/.rbenv/versions/2.6.5/bin:/home/ec2-user/.rbenv/libexec:/home/ec2-user/.rbenv/plugins/ruby-build/bin:/usr/local/bin:/usr/bin'\'' RAILS_ENV=production bundle exec rake thanxmailer_a:thanxmailer_a --silent >> /var/www/subscription/releases/20210901020531/log/cron.log 2>&1'

40 10 1 * * /bin/bash -l -c 'cd /var/www/subscription/releases/20210901020531 && PATH='\''/var/www/subscription/shared/bundle/ruby/2.6.0/bin:/home/ec2-user/.rbenv/versions/2.6.5/bin:/home/ec2-user/.rbenv/libexec:/home/ec2-user/.rbenv/plugins/ruby-build/bin:/usr/local/bin:/usr/bin'\'' RAILS_ENV=production bundle exec rake thanxmailer_b:thanxmailer_b --silent >> /var/www/subscription/releases/20210901020531/log/cron.log 2>&1'

30 9 15 * * /bin/bash -l -c 'cd /var/www/subscription/releases/20210901020531 && PATH='\''/var/www/subscription/shared/bundle/ruby/2.6.0/bin:/home/ec2-user/.rbenv/versions/2.6.5/bin:/home/ec2-user/.rbenv/libexec:/home/ec2-user/.rbenv/plugins/ruby-build/bin:/usr/local/bin:/usr/bin'\'' RAILS_ENV=production bundle exec rake thanxmailer_c:thanxmailer_c --silent >> /var/www/subscription/releases/20210901020531/log/cron.log 2>&1'

# End Whenever generated tasks for: subscription at: 2021-09-01 02:06:13 +0000

# Begin Whenever generated tasks for: /var/www/subscription/config/schedule.rb at: 2021-09-01 02:07:52 +0000
30 9 1 * * /bin/bash -l -c 'cd /var/www/subscription && PATH='\''/home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/bin:/home/ec2-user/.rbenv/versions/2.6.5/bin:/home/ec2-user/.rbenv/libexec:/home/ec2-user/.rbenv/plugins/ruby-build/bin:/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin'\'' RAILS_ENV=production bundle exec rake thanxmailer_a:thanxmailer_a --silent >> /var/www/subscription/log/cron.log 2>&1'

30 9 1 * * /bin/bash -l -c 'cd /var/www/subscription && PATH='\''/home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/bin:/home/ec2-user/.rbenv/versions/2.6.5/bin:/home/ec2-user/.rbenv/libexec:/home/ec2-user/.rbenv/plugins/ruby-build/bin:/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin'\'' RAILS_ENV=production bundle exec rake thanxmailer_b:thanxmailer_b --silent >> /var/www/subscription/log/cron.log 2>&1'

30 9 15 * * /bin/bash -l -c 'cd /var/www/subscription && PATH='\''/home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/bin:/home/ec2-user/.rbenv/versions/2.6.5/bin:/home/ec2-user/.rbenv/libexec:/home/ec2-user/.rbenv/plugins/ruby-build/bin:/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin'\'' RAILS_ENV=production bundle exec rake thanxmailer_c:thanxmailer_c --silent >> /var/www/subscription/log/cron.log 2>&1'

# End Whenever generated tasks for: /var/www/subscription/config/schedule.rb at: 2021-09-01 02:07:52 +0000

上記の出力内容にを追加しまして、保存しました。
申し訳ございません、その後の『上の同じコマンドと見比べて~/my_crontab.logに書き出される内容に違いはありますか?』はどのような形で行うのでしょうか??

* * * * * printenv >> ~/my_crontab.log
* * * * * whoami >> ~/my_crontab.log
0Like

多分問題が2点あって複合的に質問されている気がします。

  1. schedule.rbに記述してる指定時間が本番環境だと反映されない
  2. メーラーの機能が動いていない

**1.**についてはcrontab -lで表示されているように1分毎に指定のコマンドは実行されていると思います(思った内容が実行されているかどうかは別として)。
**2.**についてはcrontabがどうかというより、そのユーザー、その環境でコマンドが実行できる状況なのか?が問題と思います。

A: まず意図的ではないとするならBegin Whenever generated tasks for:が2箇所ある意味はわかりますか?

それに加えてbundle exec wheneverはgithubに書かれているとおりと思います。

https://github.com/javan/whenever#the-whenever-command
The whenever command
The whenever command will simply show you your schedule.rb file converted to cron syntax. It does not read or write your crontab file.

wheneverが定期実行するわけではなく、crontabに書かれていることが定期実行されるのでcrontab -lしたほうが実際の内容が見れて正しいと思います(さらにcrontabはユーザー毎にある)。

B: このコマンドは本番環境で本当に動きますか?(どのユーザーで?)

$ /bin/bash -l -c 'export PATH="$HOME/.rbenv/bin:$PATH"; eval "$(rbenv init -)"; cd /var/www/アプリ名/releases/20210831062614 && RAILS_ENV=production bundle exec rake thanxmailer_a:thanxmailer_a >> /deploy/apps/アプリ名/shared/log/crontab.log 2>&1'

実際に本番環境で打ってみてください。

$ printenv
$ whoami

さらにこれらはどういう値が出ますか?

C: cronはどのユーザーで、どういう環境変数で動いていますか?

直接crontabを編集
$ crontab -e
...
...

* * * * * printenv >> ~/my_crontab.log
* * * * * whoami >> ~/my_crontab.log

上の同じコマンドと見比べて~/my_crontab.logに書き出される内容に違いはありますか?

0Like

また、こちらを参考に下記の設定も行いました。

Capfile
require 'whenever/capistrano'
deploy.rb
set :whenever_roles,        ->{ :app }
application.rb
module アプリ名
  class Application < Rails::Application
    config.paths.add 'lib', eager_load: true
  end
end
0Like

@github0013@github

早速の、ご回答頂きありがとうございます!
私の認識や知識不足で、色々と自分も@github0013@github困惑させてしまいました。
申し訳ございまいません。

現状下記のように認識して話を進めております。
もし違いましたら、ご指摘頂きたいです。

RAILS_ENV=production bundle exec whenever

こちらが、wheneverぼ設定内容が反映されているのを確認するコマンドかと認識してました。

現状『crontab -l』の内容が

[ec2-user@本番アプリケーション]$ crontab -l

# Begin Whenever generated tasks for: アプリ名 at: 2021-09-01 02:06:13 +0000
* * * * * /bin/bash -l -c 'export PATH="$HOME/.rbenv/bin:$PATH"; eval "$(rbenv init -)"; cd /var/www/アプリ名/releases/20210831062614 && RAILS_ENV=production bundle exec rake thanxmailer_a:thanxmailer_a >> /deploy/apps/アプリ名/shared/log/crontab.log 2>&1'

40 10 1 * * /bin/bash -l -c 'export PATH="$HOME/.rbenv/bin:$PATH"; eval "$(rbenv init -)"; cd /var/www/アプリ名/releases/20210831062614 && RAILS_ENV=production bundle exec rake thanxmailer_b:thanxmailer_b >> /deploy/apps/アプリ名/shared/log/crontab.log 2>&1'

30 9 15 * * /bin/bash -l -c 'export PATH="$HOME/.rbenv/bin:$PATH"; eval "$(rbenv init -)"; cd /var/www/アプリ名/releases/20210831062614 && RAILS_ENV=production bundle exec rake thanxmailer_c:thanxmailer_c >> /deploy/apps/アプリ名/shared/log/crontab.log 2>&1'

# End Whenever generated tasks for: アプリ名 at: 2021-09-01 02:06:13 +0000

# Begin Whenever generated tasks for: /var/www/アプリ名/config/schedule.rb at: 2021-08-31 07:36:20 +0000
30 9 1 * * /bin/bash -l -c 'cd /var/www/アプリ名&& PATH='\''/home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/bin:/home/ec2-user/.rbenv/versions/2.6.5/bin:/home/ec2-user/.rbenv/libexec:/home/ec2-user/.rbenv/plugins/ruby-build/bin:/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin'\'' RAILS_ENV=production bundle exec rake thanxmailer_a:thanxmailer_a --silent >> /var/www/アプリ名/log/cron.log 2>&1'

30 9 1 * * /bin/bash -l -c 'cd /var/www/アプリ名 && PATH='\''/home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/bin:/home/ec2-user/.rbenv/versions/2.6.5/bin:/home/ec2-user/.rbenv/libexec:/home/ec2-user/.rbenv/plugins/ruby-build/bin:/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin'\'' RAILS_ENV=production bundle exec rake thanxmailer_b:thanxmailer_b --silent >> /var/www/アプリ名/log/cron.log 2>&1'

30 9 15 * * /bin/bash -l -c 'cd /var/www/アプリ名 && PATH='\''/home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/bin:/home/ec2-user/.rbenv/versions/2.6.5/bin:/home/ec2-user/.rbenv/libexec:/home/ec2-user/.rbenv/plugins/ruby-build/bin:/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin'\'' RAILS_ENV=production bundle exec rake thanxmailer_c:thanxmailer_c --silent >> /var/www/アプリ名/log/cron.log 2>&1'

# End Whenever generated tasks for: /var/www/アプリ名/config/schedule.rb at: 2021-08-31 07:36:20 +00

crontab -lで反映されているので、wheneverは動いているがメーラーの機能が動いていないという形でしょうか??

0Like

ローカルアプリケーションでは実行される形になっております!
しかしこの表記は、反映されてないのでしょうか??

とは、つまりはどういう意味ですか?

[ec2-user@本番アプリケーション]$ crontab -l

# Begin Whenever generated tasks for: アプリ名 at: 2021-08-31 06:26:54 +0000
* * * * * /bin/bash -l -c 'export PATH="$HOME/.rbenv/bin:$PATH"; eval "$(rbenv init -)"; cd /var/www/アプリ名/releases/20210831062614 && RAILS_ENV=production bundle exec rake thanxmailer_a:thanxmailer_a >> /deploy/apps/アプリ名/shared/log/crontab.log 2>&1'

これが実際の出力のままであればevery 1.minutes ..は実行されてますよね?

Begin Whenever generated tasks for:のidentifierが2個あるのでwhenever実行時に個別のidentifierを振ったんじゃないかと。

whenever --help                                                                                                                         [17/17]
Usage: whenever [options]
    -i [identifier],                 Default: full path to schedule.rb file
        --update-crontab
    -w, --write-crontab [identifier] Default: full path to schedule.rb file
    -c, --clear-crontab [identifier]
    -s, --set [variables]            Example: --set 'environment=staging&path=/my/sweet/path'
    -f, --load-file [schedule file]  Default: config/schedule.rb
    -u, --user [user]                Default: current user
    -k, --cut [lines]                Cut lines from the top of the cronfile
    -r, --roles [role1,role2]        Comma-separated list of server roles to generate cron jobs for
    -x, --crontab-command [command]  Default: crontab
    -v, --version

自分はどのパスでも実行できるようにこういう感じでディレクトリ名を元にしています。

whenever -i `basename $(pwd)`
0Like

ご回答ありがとうございます!

ローカルアプリケーションでは実行される形になっております!
しかしこの表記は、反映されてないのでしょうか??

また回答頂きました、下記を本番環境のアプリケーションへ実行しますと

$ crontab -l

このような、形になりました。

[ec2-user@本番アプリケーション]$ crontab -l

# Begin Whenever generated tasks for: アプリ名 at: 2021-08-31 06:26:54 +0000
* * * * * /bin/bash -l -c 'export PATH="$HOME/.rbenv/bin:$PATH"; eval "$(rbenv init -)"; cd /var/www/アプリ名/releases/20210831062614 && RAILS_ENV=production bundle exec rake thanxmailer_a:thanxmailer_a >> /deploy/apps/アプリ名/shared/log/crontab.log 2>&1'

30 9 1 * * /bin/bash -l -c 'export PATH="$HOME/.rbenv/bin:$PATH"; eval "$(rbenv init -)"; cd /var/www/アプリ名/releases/20210831062614 && RAILS_ENV=production bundle exec rake thanxmailer_b:thanxmailer_b >> /deploy/apps/アプリ名/shared/log/crontab.log 2>&1'

30 9 15 * * /bin/bash -l -c 'export PATH="$HOME/.rbenv/bin:$PATH"; eval "$(rbenv init -)"; cd /var/www/アプリ名/releases/20210831062614 && RAILS_ENV=production bundle exec rake thanxmailer_c:thanxmailer_c >> /deploy/apps/アプリ名/shared/log/crontab.log 2>&1'

# End Whenever generated tasks for: アプリ名 at: 2021-08-31 06:26:54 +0000

# Begin Whenever generated tasks for: /var/www/アプリ名/config/schedule.rb at: 2021-08-31 07:36:20 +0000
30 9 1 * * /bin/bash -l -c 'cd /var/www/アプリ名&& PATH='\''/home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/bin:/home/ec2-user/.rbenv/versions/2.6.5/bin:/home/ec2-user/.rbenv/libexec:/home/ec2-user/.rbenv/plugins/ruby-build/bin:/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin'\'' RAILS_ENV=production bundle exec rake thanxmailer_a:thanxmailer_a --silent >> /var/www/アプリ名/log/cron.log 2>&1'

30 9 1 * * /bin/bash -l -c 'cd /var/www/アプリ名 && PATH='\''/home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/bin:/home/ec2-user/.rbenv/versions/2.6.5/bin:/home/ec2-user/.rbenv/libexec:/home/ec2-user/.rbenv/plugins/ruby-build/bin:/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin'\'' RAILS_ENV=production bundle exec rake thanxmailer_b:thanxmailer_b --silent >> /var/www/アプリ名/log/cron.log 2>&1'

30 9 15 * * /bin/bash -l -c 'cd /var/www/アプリ名 && PATH='\''/home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/bin:/home/ec2-user/.rbenv/versions/2.6.5/bin:/home/ec2-user/.rbenv/libexec:/home/ec2-user/.rbenv/plugins/ruby-build/bin:/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin'\'' RAILS_ENV=production bundle exec rake thanxmailer_c:thanxmailer_c --silent >> /var/www/アプリ名/log/cron.log 2>&1'

# End Whenever generated tasks for: /var/www/アプリ名/config/schedule.rb at: 2021-08-31 07:36:20 +00
0Like

Your answer might help someone💌