web-dev-qa-db-ja.com

いつでも宝石で動作しないcronジョブ

たくさんのタスクを含むアプリケーションがあり、データベース内のタスクごとに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の時刻を変更しています。

19

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

次に、実行するプロセスは次のとおりです。

  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時に-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. 完了
67
damoiser

以下を実行して、実際にジョブをcrontabに登録する必要があります。

whenever --update-crontab

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

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

4
Graham T

生成されたコマンドをターミナルから直接実行するか、次の行を追加してみてください[email protected]crontabに。

0
Hugo

wheneverコマンドで-bash: whenever: command not foundが得られる場合は、bundle exec wheneverを試してください。

0
Dende