22

多数のタスクを含むアプリケーションがあり、データベース内のタスクごとにDayTaskを作成するcronジョブを毎日実行したいと考えています。タスクhas_manyDayTasksとこれらのdaytasksは、ユーザーが毎日チェックするものです。私はeverythinggemを使用していますが、まったく実行されていないようです。何か案は?

config / schedule.rb

every 1.day, :at => "12:01am" do
  runner "Task.generate_tasks_for_day"  
end

Task.rb

  def generate_tasks_for_day
    Task.all.each do |task|
      task.day_tasks.create(:target_date => Date.today)
    end 
  end 

'wheneverコマンド'を実行した結果

1 0 * * * /bin/bash -l -c 'cd /home/grant/rails_projects/GoalTwist && script/rails runner -e production '\''Task.generate_tasks_for_day'\'''

注:テスト実行するたびに、config/schedule.rbの時刻を変更しています。

4

4 に答える 4

74

最後に、いつでも宝石を実行する方法を解決しました。本番環境ではうまく機能していますが、開発モードではうまく機能していません (開発モードでうまく機能するには、いくつかのトリックを行う必要があると思います)。

次に、次のプロセスを実行します。

  1. ジェムをインストールする
  2. scheduler.rbあなたのファイルを書く
  3. リモートサーバーにプッシュする
  4. リモートサーバーにログインします (たとえば、ssh)
  5. ターミナルで実行して、いつでもアップロードできるかどうかを確認します。whenever
  6. 次のコマンドを実行して、crontab を毎回更新します。whenever --update-crontab
  7. サーバーの crontab を再起動します (たとえば、Ubuntu サーバーの場合):sudo service cron restart
  8. crontab がサーバーに適切に実装されているかどうかを確認します。crontab -l

それでおしまい!

個人的には、サーバーから直接 cron をセットアップすることを好みます。

  1. crontab を編集します。crontab -e
  2. cron を追加します (たとえば、毎日午前 5:00 に - 非 Linux ベースのサーバーでは少し異なる場合があります):
    0 5 * * * /bin/bash -l -c 'cd /path_to_my_app/current && RAILS_ENV=production bundle exec rake my_cron_rake'
  3. 適切に実装されているかどうかを確認します。crontab -l
  4. 終わり
于 2012-11-06T19:11:50.337 に答える
8

次のコマンドを実行して、実際にジョブを crontab に登録する必要があります。

whenever --update-crontab

また、ジョブをローカルで実行しようとしている場合は :environment => "development"、タスクに追加します

runner "MyTask.some_action", :environment => "development"

于 2016-01-18T21:46:14.307 に答える
0

ターミナルから直接生成されたコマンドを実行するか MAILTO=your@emailadress.com 、crontabに次の行を追加してみてください。

于 2011-09-25T22:29:37.877 に答える
0

wheneverコマンドがあなたに与えるなら、-bash: whenever: command not found試してくださいbundle exec whenever

于 2020-03-24T15:50:34.950 に答える