Rails의 Cron 작업: When 실제 사용에 대한 간단한 가이드(이제 작업 포함)

4626 단어 railswheneverrubycron
whenever를 사용하여 Rails에서 작업을 예약할 기회가 있었고 나중에 참조할 수 있도록 이 게시물을 작성하고 있습니다. Rails에서 정기적인 작업을 예약하는 다른 방법이 있다는 것을 알고 있지만 이것이 가장 간단한 방법 중 하나일 것입니다.
참고: 가이드는 Linux 또는 MacOS 시스템용입니다.

크론 작업이란 무엇입니까?



Cron은 고정된 시간(예: 매분, 매시간, 매일 오후 3시)에 반복 작업을 실행할 수 있는 작업 스케줄러입니다.
작업은 crontab("cron table"의 줄임말)이라는 파일에 작성되며 일반적으로 다음 위치에 저장됩니다. /usr/bin/

Rails의 cron 작업에 항상 사용



Whenever 은 크론 작업을 설정하는 데 도움이 되는 보석입니다. 직접 crontab을 수동으로 편집하는 대신 Ruby 코드로 작업을 작성하여 crontab을 업데이트하도록 할 수 있습니다whenever. schedule.rb에서 수정합니다.

참고: 언급할 가치가 있는 한 가지는 실제 작업 자체(제 경우에는 배치 메시지를 주기적으로 전송)가 crontab 또는 crontab에 쓰기 위한 Rails 파일schedule.rb에 작성되어서는 안 된다는 것입니다. 작업 자체는 Rake 작업으로 별도로 작성해야 합니다. 그런 다음 해당 Rake 작업을 크론 작업으로 정기적으로 예약할 수 있습니다.

단계


1. 언제든지 설치



Gemfile에 포함하고 실행bundle하여 설치합니다.

gem 'whenever', require: false


2. schedule.rb에서 cron 작업을 예약합니다.


config/schedule.rb는 작업을 실행할 시기와 Rake 작업의 이름을 지정하는 파일입니다(다시 말하지만 실제 작업은 별도의 파일에 작성해야 함).

Rails 앱 루트에서 다음을 실행하여 schedule.rb 파일을 생성합니다.

bundle exec wheneverize .


이제 schedule.rb에 작업 세부 사항을 작성하십시오. 예를 들어 매분 Rake 작업batch:send_messages을 실행하려는 경우:

every 1.minute do
  rake 'batch:send_messages'
end

every 2.hoursevery 1.day 등을 수행할 수도 있습니다.

3. crontab에 every 작업을 작성합니다.


whenever가 crontab에 작업을 기록하도록 합니다.

bundle exec whenever --update-crontab


중요한Whenever는 crontab에 쓸 때 Rails 앱 환경을 고려합니다. development 환경을 사용하는 경우 아래 옵션과 함께 명령을 실행합니다(기본값은 production ).

whenever --update-crontab --set environment='development'


참고로 다음 명령을 실행한 후 crontab이 다음과 같이 표시됩니다( RAILS_ENV is development ).

# Begin Whenever generated tasks for: /Users/<USER>/<APPNAME>/config/schedule.rb at: 2019-01-14 18:15:41 +0900
* * * * * /bin/bash -l -c 'cd /Users/<USER>/<APPNAME> && RAILS_ENV=development bundle exec rake batch:send_messages --silent'

# End Whenever generated tasks for: /Users/<USER>/<APPNAME>/config/schedule.rb at: 2019-01-14 18:15:41 +0900



기타 명령
  • crontab 표시: crontab -l
  • whenever task의 crontab을 닦으십시오: bundle exec whenever --clear-crontab

  • 4. 갈퀴 작업 만들기



    Rake 작업은 특정 명명 규칙(네임스페이스 및 작업 이름)을 따릅니다. 네임스페이스는 특정 작업을 함께 그룹화하기 위한 것입니다. 예를 들어 아래의 경우 배치 작업이 여러 개인 경우 모두 batch 아래에 넣을 수 있습니다.
    lib/tasks/batch.rake에서 Rake 작업을 위한 파일을 생성합니다. 다음 공식을 따릅니다.
    rails g task <NAMESPACE> <TASKNAME>
    따라서 send_messages 네임스페이스에서 batch 작업을 생성하려면 터미널에 다음을 입력합니다.

    rails g task batch send_messages
    


    이제 작업에 대한 임의의 설명인 desc 와 실행될 코드인 task 의 두 매개변수를 사용하는 작업을 작성합니다.

    예를 들어:

    namespace :batch do
      desc 'Send out batch messages'
      task send_messages: :environment do
        # The code to actually send our messages would go here
      end
    end
    


    아래와 같이 명령줄에서 실행하여 Rake 작업을 테스트할 수 있습니다.

    rails batch:send_messages
    


    읽어 주셔서 감사합니다!

    좋은 웹페이지 즐겨찾기