Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

When 때마다 젬을 사용하여 Ruby에서 Cron 작업을 예약하는 방법

크론이란 무엇입니까?

Cron은 Linux 및 MacOS 운영 체제에서 사용할 수 있는 작업 스케줄링 시스템입니다.

모든 프로그램을 실행하는 데 사용할 수 있습니다. 언제든지.

여기에는 Ruby 코드가 포함됩니다!

특정 반복 작업이 있는 경우 매일, 매주 또는 매시간 자동으로 실행하려는 경우 Cron이 원하는 것일 수 있습니다.

작업의 예는 다음과 같습니다. :

  • 주간 데이터베이스 백업 실행
  • 웹사이트 활동에 대한 일일 보고서 생성
  • 알림 이메일 보내기

cron이 어떻게 작동하는지 알아봅시다!

크론의 기본

모든 사용자는 실행하려는 작업을 정의하는 cron 파일을 가질 수 있습니다.

crontab -e를 사용하여 이 파일을 편집할 수 있습니다. 명령.

또는 crontab -l을 사용하여 예약된 작업을 나열합니다. .

크론 작업의 예 :

0 0 * * * /opt/rubies/ruby-2.5.1/bin/rake db:backup

구문이 약간 까다로울 수 있으며 항상 수동으로 이러한 파일을 편집하고 싶지 않을 수 있습니다.

일을 더 쉽게 만들어 줄 보석이 ​​있습니까?

네!

언제든 젬 사용 방법

cron 구문은 기억하기 어려울 수 있으므로 whenever와 같은 gem을 사용할 수 있습니다. .

이 보석은 Ruby에서 cron 작업을 정의하는 데 도움이 됩니다. .

먼저 gem을 설치하세요.

그런 다음 구성 파일을 만듭니다. :

wheneverize .
# [add] config/schedule.rb

열어보세요.

주석 처리된 몇 가지 예가 표시되며 원하는 경우 삭제하십시오.

매시간 실행되는 백업 작업을 원한다고 가정해 보겠습니다.

"config/schedule.rb" 파일 안에 이것을 작성하세요. :

every 1.hour do
  rake "db:backup"
end

옵션 포함 :

  • rake(현재 프로젝트에 정의된 rake 작업을 시작합니다. db:backup 기본적으로 정의되어 있지 않지만 db:version을 시도할 수 있습니다. )
  • runner(Archive.backup_now와 같은 Ruby 클래스 + 메소드) )
  • 명령(시스템 명령)

지금 :

whenever --update-crontab 실행 cron 항목을 생성하는 명령입니다.

crontab -l을 사용하여 새 항목을 볼 수 있어야 합니다. .

이것이 내가 얻은 것입니다. :

0 * * * * /bin/bash -l -c 'cd /home/jesus/testing && RAILS_ENV=production bundle exec rake db:backup --silent'

작업이 production에서 실행됩니다. 모드.

변경하시겠습니까?

이 설정을 사용할 수 있습니다. :

set :environment, "development"

이것은 schedule.rb에 들어갑니다. 파일, 상단에 있습니다.

이 명령을 사용할 수도 있습니다. :

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

이 명령을 실행할 때 환경으로 "개발"이 있는 모든 작업이 생성됩니다.

언제든지 더 많은 예

이 예는 어떻게 더 구체적일 수 있는지 보여줍니다.

주간 작업 :

every :monday, at: "6:00 PM" do
  runner "Mail.send_weekly_newsletter"
end

이 예는 하루 동안 동일한 작업을 여러 번 실행하는 방법을 보여줍니다.

하루에 두 번 작업 실행 :

every :day, at: ["12:00 AM", "12:00 PM"] do
  command "rm tmp/testing.txt"
end

보석 로깅 및 문제 해결 시마다

crontab 파일에 작업이 있으면 ( crontab -l로 확인하십시오. ) 준비가 되었습니다.

다음:

예약된 작업이 올바르게 작동하는지 어떻게 알 수 있나요?

로깅을 설정하고 출력을 읽을 수 있습니다.

schedule.rb 상단에 이것을 추가하여 로깅을 활성화하십시오. 파일.

구성 :

set :output, "log/cron.log"

whenever --update-crontab을 실행할 때마다 실행하는 것을 잊지 마십시오. 변경할 때마다 명령하세요!

로그 파일이 아직 비어 있습니까?

어떤 일이 일어나려면 예정된 시간을 기다려야 합니다.

Btw, 로그에 이 오류가 표시되는 경우 :

/bin/bash: bundle: command not found

이는 cron이 귀하와 동일한 버전의 Ruby를 실행하지 않는다는 것을 의미합니다.

Ruby 버전 관리자를 사용하는 경우 :

.bash_profile에서 로드해야 합니다. .bashrc 대신 파일 , cron 작업에서 사용할 수 있도록 합니다.

언제든지의 대안

잘 관리된 보석은 언제라도 훌륭하게 작동합니다.

그러나 대안은 무엇입니까?

목록은 다음과 같습니다. :

  • Heroku Scheduler는 Heroku 사용자를 위한 무료 작업 일정 추가 기능입니다. cron만큼 유연하지는 않지만 작업을 완료합니다.
  • Cron을 인메모리 스케줄러로 대체하는 Ruby gem인 Rufus Scheduler
  • Sidecloq 및 Sidekiq-cron은 둘 다 Sidekiq에 반복 작업을 추가하는 Sidekiq 애드온입니다.

두 Sidekiq 애드온은 스케줄링을 위한 실제 cron 구문을 원하므로 when 구문만큼 좋지 않습니다.

좋은 점은 Sidekiq 웹 UI와 통합된다는 것입니다.

요약

Ruby에서 when gem을 사용하여 cron 작업을 예약하는 방법을 배웠습니다!

이 기사를 공유하여 더 많은 사람들이 혜택을 받을 수 있도록 하십시오.

읽어주셔서 감사합니다.